SQL Server har ett gäng funktioner som returnerar aktuellt datum/tid. Två av dessa är GETDATE()
och SYSDATETIME()
funktioner.
Vid första anblicken verkar dessa två funktioner göra samma sak – hämta aktuellt datum och tid från operativsystemet på datorn där instansen av SQL Server körs.
Det finns dock en subtil skillnad mellan de två.
Skillnaden? Typen returvärde
Den största skillnaden mellan GETDATE()
och SYSDATETIME()
är i returvärdetypen.
GETDATE()
returnerar en datumtid värde.SYSDATETIME()
returnerar en datetime2(7) värde.
Detta betyder att SYSDATETIME()
har mer bråksekundersprecision än GETDATE()
.
Båda funktionerna hämtar det aktuella datumet och tiden från operativsystemet på den dator där instansen av SQL Server körs, men precisionen är annorlunda.
Exempel
Här är ett exempel för att visa de olika värdena som returneras för varje funktion:
SELECT GETDATE() AS GETDATE, SYSDATETIME() AS SYSDATETIME;
Resultat:
+-------------------------+-----------------------------+ | GETDATE | SYSDATETIME | |-------------------------+-----------------------------| | 2018-06-13 02:48:27.653 | 2018-06-13 02:48:27.6542371 | +-------------------------+-----------------------------+
Så som nämnts, SYSDATETIME()
, som returnerar en datetime2(7) värde, har en större precision än GETDATE()
, som returnerar en datumtid värde.
datetime2 datatypen har också ett större datumintervall och valfri användarspecificerad precision.
Vilken ska jag använda?
Microsoft rekommenderar att vi använder datetime2 med våra datum/tidsvärden. Denna datatyp överensstämmer med SQL-standarden och är mer portabel än datetime .
Använd därför SYSDATETIME()
såvida du inte har anledning att göra det.