Gibt es ein Analogon von GETDATE (), das DATETIME2 zurückgibt?

42

Laut MSDN geben Getdate (), GetUtcDate () und CURRENT_TIMESTAMP alle DATETIME zurück. Ich habe einen kurzen Test durchgeführt, der Folgendes bestätigt:

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

(snip)

Gibt es eine ähnliche Funktion, die DATETIME2 (7) zurückgibt?

AK
quelle

Antworten:

53

SYSDATETIMEGibt ein DATETIME2Objekt zurück.

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
quelle
13
Es gibt auch SYSUTCDATETIME()zu ergänzen GETUTCDATE().
Aaron Bertrand
1
@swasheck, gutes Beispiel! es zeigt deutlich, dass die Auflösung dieser Funktion zwar besser zu sein scheint, aber dennoch Werte zurückgibt, die etwa 16 ms voneinander entfernt sind.
Razvan Socol
Ich habe im Wesentlichen die gleiche Schleife geschrieben, obwohl ich 5 Spalten in meiner Tabelle habe und 100-mal schleife. Die ersten 33 Zeilen zeigen genau den gleichen datetime2-Wert - einschließlich aller 7 Dezimalstellen. Die nächsten 29 Zeilen zeigen den gleichen Wert für datetime2 usw. Können Sie vorschlagen, warum das so sein könnte? Ich erinnere mich, dass ich vor einiger Zeit in einer anderen Umgebung erfahren habe, dass die Systemuhr auf dem Computer, auf dem die Abfrage ausgeführt wird, die Systemzeit nicht unbedingt alle 0,000001 Sekunden aktualisiert, obwohl zeitbezogene Datentypen mit hoher Genauigkeit auf so viele Dezimalstellen genau sind. Könnte das die Ursache sein?
youcantryreachingme