根据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)的类似函数?

#1 楼

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


评论


还有SYSUTCDATETIME()来补充GETUTCDATE()。

–亚伦·伯特兰(Aaron Bertrand)
13年1月28日在19:36

@swasheck,很好的例子!它清楚地表明,尽管此函数的分辨率似乎更好,但它仍返回相距约16ms的值。

–拉兹万·索科尔(Razvan Socol)
17年2月24日在12:19

尽管实际上我的表中有5列并且循环了100次,但我基本上编写了相同的循环。前33行显示完全相同的datetime2值-包括所有7个小数位。接下来的29行显示彼此相同的datetime2值,依此类推。你能建议为什么会这样吗?我回想起在另一个环境中的一些时光倒流,虽然高精度的时间相关数据类型可以精确到许多小数位,但是运行查询的计算机上的系统时钟并不一定每0.000001秒更新一次系统时间。这可能是原因吗?

–youcantryreachingme
18-09-26在4:56