Existe-t-il un analogue de GETDATE () qui renvoie DATETIME2

42

Selon MSDN, Getdate (), GetUtcDate () et CURRENT_TIMESTAMP renvoient tous DATETIME. J'ai fait un petit test qui confirme que:

CREATE TABLE #t(T DATETIME2(7));
GO

DECLARE @i INT ;
SET @i=1;

WHILE @i<10000 BEGIN ;
INSERT #t VALUES(CURRENT_TIMESTAMP) ;
SET @i=@i+1;
END ;

SELECT DISTINCT t 
FROM #t 
ORDER BY t ;

---

2013-01-28 13:23:19.4930000
2013-01-28 13:23:19.4970000
2013-01-28 13:23:19.5000000
2013-01-28 13:23:19.5030000
2013-01-28 13:23:19.5070000
2013-01-28 13:23:19.5100000
2013-01-28 13:23:19.5130000

(couper)

Existe-t-il une fonction similaire qui renvoie DATETIME2 (7)?

AK
la source

Réponses:

53

SYSDATETIMEretourne un DATETIME2objet.

CREATE TABLE #t(T DATETIME2(7));
GO

DECLARE @i INT ;
SET @i=1;

WHILE @i<10000 BEGIN ;
INSERT #t VALUES(SYSDATETIME()) ;
SET @i=@i+1;
END ;

SELECT DISTINCT t 
FROM #t 
ORDER BY t ;



2013-01-28 12:34:28.2514394
2013-01-28 12:34:28.2670399
2013-01-28 12:34:28.2826404
2013-01-28 12:34:28.2982409
2013-01-28 12:34:28.3138414
2013-01-28 12:34:28.3294419
2013-01-28 12:34:28.3450424
2013-01-28 12:34:28.3606429
2013-01-28 12:34:28.3762434
2013-01-28 12:34:28.3918439
2013-01-28 12:34:28.4074444
2013-01-28 12:34:28.4230449
2013-01-28 12:34:28.4386454
2013-01-28 12:34:28.4542459
2013-01-28 12:34:28.4698464
swasheck
la source
13
Il y a aussi SYSUTCDATETIME()à compléter GETUTCDATE().
Aaron Bertrand
1
@swasheck, bon exemple! cela montre clairement que, bien que la résolution de cette fonction semble meilleure, elle renvoie toujours des valeurs distantes d’environ 16 ms.
Razvan Socol le
J'ai essentiellement écrit la même boucle, même si j'ai 5 colonnes dans mon tableau et que je boucle 100 fois. Les 33 premières lignes affichent exactement la même valeur datetime2, y compris les 7 décimales. Les 29 lignes suivantes affichent la même valeur datetime2, et ainsi de suite. Pouvez-vous suggérer pourquoi cela pourrait être ainsi? Je me souviens que dans un environnement différent, il y a quelque temps, j'ai appris que, même si les types de données haute précision liés à l'heure sont précis à autant de décimales, l'horloge système de la machine qui exécute la requête ne met pas nécessairement à jour l'heure système toutes les 0,000001 secondes. Cela pourrait-il être la cause?
Youcantryreachingme