是否有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)的类似函数?

Answers:


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,很好的例子!它清楚地表明,尽管此函数的分辨率似乎更好,但它仍返回相距约16ms的值。
拉兹万·索科尔

尽管实际上我的表中有5列并且循环了100次,但我基本上编写了相同的循环。前33行显示完全相同的datetime2值-包括所有7个小数位。接下来的29行显示彼此相同的datetime2值,依此类推。你能建议为什么会这样吗?我回想起在另一个环境中的一些时间回溯学习,尽管高精度的与时间相关的数据类型可以精确到许多小数位,但是运行查询的计算机上的系统时钟并不一定每0.000001秒更新一次系统时间。这可能是原因吗?
youcantryreachingme
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.