Чи є аналог GETDATE (), який повертає DATETIME2


42

Відповідно до MSDN, Getdate (), GetUtcDate () та CURRENT_TIMESTAMP всі повертають DATETIME. Я пройшов короткий тест, який підтверджує, що:

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

(сніп)

Чи існує подібна функція, яка повертає DATETIME2 (7)?

Відповіді:


53

SYSDATETIMEповертає DATETIME2об’єкт.

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
Є також SYSUTCDATETIME()доповнення GETUTCDATE().
— Аарон Бертран

1
@swasheck, хороший приклад! це чітко показує, що хоча дозвіл цієї функції здається кращим, він все ще повертає значення, що знаходяться приблизно на відстані 16 мс.
— Разван Сокол

Я по суті написав ту саму петлю, хоча у мене в таблиці 5 стовпців, і я петлю 100 разів. Перші 33 рядки показують точно таке ж значення timetime2 - включаючи всі 7 знаків після коми. Наступні 29 рядків показують те саме значення datetime2, як один одного, тощо. Чи можете ви підказати, чому це може бути так? Я згадую в іншому середовищі деякий час назад, коли я дізнався, що, хоча типи даних, пов'язані з високою точністю, точні до багатьох знаків після коми, системний годинник на машині, що виконує запит, не обов'язково оновлює системний час кожні 0,000001 секунди. Чи може це бути причиною?
— youcantryreachingme
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.