Есть ли аналог 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
swasheck
источник
13
Также есть SYSUTCDATETIME()дополнения GETUTCDATE().
Аарон Бертран
1
@swasheck, хороший пример! это ясно показывает, что хотя разрешение этой функции кажется лучше, она все равно возвращает значения, которые находятся на расстоянии около 16 мс.
Разван
По сути, я написал тот же цикл, хотя у меня в таблице 5 столбцов, и я повторяю цикл 100 раз. Первые 33 строки показывают одно и то же значение datetime2, включая все 7 десятичных знаков. Следующие 29 строк показывают одно и то же значение datetime2 и т. Д. Можете ли вы предложить, почему это может быть так? Я вспомнил, что в другой среде некоторое время назад выяснилось, что, хотя типы данных с высокой точностью, связанные со временем, с точностью до стольких десятичных разрядов, системные часы на машине, выполняющей запрос, не обязательно обновляют системное время каждые 0,000001 секунды. Может ли это быть причиной?
youcantryreachingme