¿Hay un análogo de GETDATE () que devuelve DATETIME2

42

Según MSDN, Getdate (), GetUtcDate () y CURRENT_TIMESTAMP devuelven DATETIME. Hice una prueba corta, que confirma que:

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

(recorte)

¿Hay una función similar que devuelve DATETIME2 (7)?

Alaska
fuente

Respuestas:

53

SYSDATETIMEdevuelve un DATETIME2objeto

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
fuente
13
También hay SYSUTCDATETIME()que complementar GETUTCDATE().
Aaron Bertrand
1
@swasheck, buen ejemplo! muestra claramente que, aunque la resolución de esta función parece ser mejor, aún devuelve valores que están separados unos 16 ms.
Razvan Socol
Básicamente, he escrito el mismo bucle, aunque tengo 5 columnas en mi tabla y hago un bucle 100 veces. Las primeras 33 filas muestran exactamente el mismo valor datetime2, incluidos los 7 decimales. Las siguientes 29 líneas muestran el mismo valor datetime2 entre sí, y así sucesivamente. ¿Puedes sugerir por qué esto podría ser así? Recuerdo que en un entorno diferente aprendí hace tiempo que, aunque los tipos de datos relacionados con el tiempo de alta precisión son precisos para tantos decimales, el reloj del sistema en la máquina que ejecuta la consulta no necesariamente actualiza la hora del sistema cada 0.000001 segundos. Podria ser esta la causa?
youcantryreachingme