SQL Server má spoustu funkcí, které vracejí aktuální datum/čas. Dvě z nich jsou GETDATE()
a SYSDATETIME()
funkce.
Na první pohled se zdá, že tyto dvě funkce dělají totéž – získávají aktuální datum a čas z operačního systému počítače, na kterém běží instance SQL Server.
Mezi těmito dvěma je však jemný rozdíl.
Rozdíl? Typ návratové hodnoty
Hlavní rozdíl mezi GETDATE()
a SYSDATETIME()
je v typu návratové hodnoty.
GETDATE()
vrátí datum a čas hodnotu.SYSDATETIME()
vrátí datetime2(7) hodnotu.
To znamená, že SYSDATETIME()
má větší přesnost ve zlomcích sekund než GETDATE()
.
Obě funkce získávají aktuální datum a čas z operačního systému počítače, na kterém běží instance SQL Server, ale zlomková přesnost je odlišná.
Příklad
Zde je příklad demonstrující různé hodnoty, které jsou vráceny pro jednotlivé funkce:
SELECT GETDATE() AS GETDATE, SYSDATETIME() AS SYSDATETIME;
Výsledek:
+-------------------------+-----------------------------+ | GETDATE | SYSDATETIME | |-------------------------+-----------------------------| | 2018-06-13 02:48:27.653 | 2018-06-13 02:48:27.6542371 | +-------------------------+-----------------------------+
Jak již bylo zmíněno, SYSDATETIME()
, která vrací datetime2(7) hodnota, má větší zlomkovou přesnost než GETDATE()
, která vrací datum a čas hodnotu.
datetime2 datový typ má také větší rozsah dat a volitelnou uživatelem specifikovanou přesnost.
Který mám použít?
Společnost Microsoft doporučuje používat datetime2 s našimi hodnotami data/času. Tento datový typ je v souladu se standardem SQL a je přenosnější než datetime .
Proto použijte SYSDATETIME()
pokud k tomu nemáte důvod.