DATETIME2を返すGETDATE()の類似物はありますか


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

SYSDATETIMEDATETIME2オブジェクトを返します。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.