Czy istnieje analog GETDATE (), który zwraca DATETIME2

42

Zgodnie z MSDN, Getdate (), GetUtcDate () i CURRENT_TIMESTAMP zwracają DATETIME. Przeprowadziłem krótki test, który potwierdza, że:

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

(fantastyczna okazja)

Czy istnieje podobna funkcja zwracająca DATETIME2 (7)?

AK
źródło

Odpowiedzi:

53

SYSDATETIMEzwraca DATETIME2obiekt.

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
źródło
13
Istnieje również SYSUTCDATETIME()uzupełnienie GETUTCDATE().
Aaron Bertrand
1
@swasheck, dobry przykład! wyraźnie pokazuje, że chociaż rozdzielczość tej funkcji wydaje się lepsza, nadal zwraca wartości, które są około 16 ms od siebie.
Razvan Socol
Zasadniczo napisałem tę samą pętlę, chociaż mam 5 kolumn w tabeli i zapętlam 100 razy. Pierwsze 33 wiersze pokazują dokładnie tę samą wartość datetime2 - w tym wszystkie 7 miejsc po przecinku. Następne 29 wierszy pokazuje tę samą wartość datetime2 i tak dalej. Czy możesz zasugerować, dlaczego tak może być? Przypominam sobie w innym środowisku, jak kiedyś uczyłem się wstecz, że chociaż typy danych o wysokiej precyzji związane z czasem są dokładne do tylu miejsc po przecinku, zegar systemowy na komputerze z uruchomionym zapytaniem niekoniecznie aktualizuje czas systemowy co 0,000001 sekundy. Czy to może być przyczyna?
youcantryreachingme