Esiste un analogo di GETDATE () che restituisce DATETIME2


42

Secondo MSDN, Getdate (), GetUtcDate () e CURRENT_TIMESTAMP restituiscono tutti DATETIME. Ho eseguito un breve test, che conferma che:

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

(Snip)

Esiste una funzione simile che restituisce DATETIME2 (7)?

Risposte:


53

SYSDATETIMErestituisce un DATETIME2oggetto.

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
C'è anche SYSUTCDATETIME()da integrare GETUTCDATE().
Aaron Bertrand

1
@swasheck, buon esempio! mostra chiaramente che sebbene la risoluzione di questa funzione sembri essere migliore, restituisce comunque valori distanti circa 16ms.
Razvan Socol,

Ho essenzialmente scritto lo stesso ciclo, anche se ho 5 colonne nella mia tabella e ciclo 100 volte. Le prime 33 righe mostrano esattamente lo stesso valore datetime2, inclusi tutti i 7 decimali. Le successive 29 righe mostrano lo stesso valore datetime2 l'una dell'altra e così via. Puoi suggerire perché potrebbe essere così? Ricordo che in un ambiente diverso da tempo ho appreso che sebbene i tipi di dati relativi al tempo ad alta precisione siano accurati con così tanti decimali, l'orologio di sistema sulla macchina che esegue la query non aggiorna necessariamente l'ora di sistema ogni 0,000001 secondi. Questa potrebbe essere la causa?
youcantryreachingme,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.