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)?

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.