SQL Server ma kilka funkcji, które zwracają bieżącą datę/godzinę. Dwa z nich to GETDATE() i SYSDATETIME() funkcje.
Na pierwszy rzut oka te dwie funkcje wydają się robić to samo – pobierają bieżącą datę i godzinę z systemu operacyjnego komputera, na którym działa instancja SQL Server.
Istnieje jednak subtelna różnica między tymi dwoma.
Różnica? Typ wartości zwracanej
Główna różnica między GETDATE() i SYSDATETIME() jest w typie wartości zwracanej.
GETDATE()zwraca datęgodzinę wartość.SYSDATETIME()zwraca datetime2(7) wartość.
Oznacza to, że SYSDATETIME() ma większą precyzję ułamków sekund niż GETDATE() .
Obie funkcje pobierają bieżącą datę i godzinę z systemu operacyjnego komputera, na którym działa instancja SQL Server, ale dokładność ułamkowa jest inna.
Przykład
Oto przykład demonstrujący różne wartości zwracane dla każdej funkcji:
SELECT
GETDATE() AS GETDATE,
SYSDATETIME() AS SYSDATETIME; Wynik:
+-------------------------+-----------------------------+ | GETDATE | SYSDATETIME | |-------------------------+-----------------------------| | 2018-06-13 02:48:27.653 | 2018-06-13 02:48:27.6542371 | +-------------------------+-----------------------------+
Jak wspomniano, SYSDATETIME() , który zwraca datetime2(7) ma większą dokładność ułamkową niż GETDATE() , który zwraca datę-godzinę wartość.
data/godzina2 typ danych ma również większy zakres dat i opcjonalną precyzję określoną przez użytkownika.
Którego mam użyć?
Firma Microsoft zaleca korzystanie z datetime2 z naszymi wartościami daty/czasu. Ten typ danych jest zgodny ze standardem SQL i jest bardziej przenośny niż data-godzina .
Dlatego użyj SYSDATETIME() chyba że masz powód, aby tego nie robić.