Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SYSDATETIME() vs GETDATE() dans SQL Server :Quelle est la différence ?

SQL Server a un tas de fonctions qui renvoient la date/heure actuelle. Deux d'entre eux sont le GETDATE() et SYSDATETIME() fonctions.

À première vue, ces deux fonctions semblent faire la même chose :obtenir la date et l'heure actuelles du système d'exploitation de l'ordinateur sur lequel l'instance de SQL Server est exécutée.

Cependant, il existe une différence subtile entre les deux.

La différence ? Le type de valeur de retour

La principale différence entre GETDATE() et SYSDATETIME() est dans le type de valeur de retour.

  • GETDATE() renvoie une datetime valeur.
  • SYSDATETIME() renvoie un datetime2(7) valeur.

Cela signifie que SYSDATETIME() a plus de précision en fractions de seconde que GETDATE() .

Les deux fonctions obtiennent la date et l'heure actuelles du système d'exploitation de l'ordinateur sur lequel l'instance de SQL Server est exécutée, mais la précision fractionnaire est différente.

Exemple

Voici un exemple pour illustrer les différentes valeurs renvoyées pour chaque fonction :

SELECT 
    GETDATE() AS GETDATE,
    SYSDATETIME() AS SYSDATETIME;

Résultat :

+-------------------------+-----------------------------+
| GETDATE                 | SYSDATETIME                 |
|-------------------------+-----------------------------|
| 2018-06-13 02:48:27.653 | 2018-06-13 02:48:27.6542371 |
+-------------------------+-----------------------------+

Donc, comme mentionné, SYSDATETIME() , qui renvoie un datetime2(7) valeur, a une précision fractionnaire supérieure à  GETDATE() , qui renvoie une datetime valeur.

Le datetime2 le type de données a également une plage de dates plus large et une précision facultative spécifiée par l'utilisateur.

Lequel dois-je utiliser ?

Microsoft recommande d'utiliser datetime2 avec nos valeurs de date/heure. Ce type de données est conforme à la norme SQL et est plus portable que datetime .

Par conséquent, utilisez SYSDATETIME() sauf si vous avez une raison de ne pas le faire.