Apakah ada analog GETDATE () yang mengembalikan DATETIME2

42

Menurut MSDN, Getdate (), GetUtcDate (), dan CURRENT_TIMESTAMP semuanya mengembalikan DATETIME. Saya menjalankan tes singkat, yang menegaskan bahwa:

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

(menggunting)

Apakah ada fungsi serupa yang mengembalikan DATETIME2 (7)?

AK
sumber

Jawaban:

53

SYSDATETIMEmengembalikan DATETIME2objek.

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
sumber
13
Ada juga SYSUTCDATETIME()pelengkap GETUTCDATE().
Aaron Bertrand
1
@swasheck, contoh yang bagus! itu jelas menunjukkan bahwa walaupun resolusi fungsi ini tampaknya lebih baik, masih mengembalikan nilai yang berjarak sekitar 16 ms.
Razvan Socol
Saya pada dasarnya telah menulis loop yang sama, meskipun saya memiliki 5 kolom di meja saya dan saya loop 100 kali. 33 baris pertama menunjukkan nilai datetime2 yang persis sama - termasuk semua 7 tempat desimal. 29 baris berikutnya menunjukkan nilai datetime2 yang sama satu sama lain, dan seterusnya. Bisakah Anda menyarankan mengapa ini bisa terjadi? Saya ingat di lingkungan yang berbeda beberapa waktu lalu belajar bahwa meskipun tipe data terkait waktu presisi tinggi akurat untuk begitu banyak tempat desimal, jam sistem pada mesin yang menjalankan kueri tidak selalu memperbarui waktu sistem setiap 0,000001 detik. Mungkinkah ini penyebabnya?
youcantryreachingme