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ć.