Existe um análogo de GETDATE () que retorna DATETIME2

42

De acordo com o MSDN, Getdate (), GetUtcDate () e CURRENT_TIMESTAMP retornam DATETIME. Fiz um pequeno teste, 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)

Existe uma função semelhante que retorna DATETIME2 (7)?

AK
fonte

Respostas:

53

SYSDATETIMEretorna um 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
fonte
13
Há também SYSUTCDATETIME()para complementar GETUTCDATE().
Aaron Bertrand
1
@swasheck, bom exemplo! mostra claramente que, embora a resolução dessa função pareça ser melhor, ela ainda retorna valores que têm cerca de 16ms de distância.
Razvan Socol
Eu escrevi essencialmente o mesmo loop, embora eu tenha 5 colunas na minha tabela e faça loop 100 vezes. As primeiras 33 linhas mostram exatamente o mesmo valor datetime2 - incluindo todas as 7 casas decimais. As próximas 29 linhas mostram o mesmo valor datetime2 um do outro e assim por diante. Você pode sugerir por que isso pode acontecer? Recordo-me em um ambiente diferente há algum tempo aprendendo que, embora os tipos de dados relacionados ao tempo de alta precisão sejam precisos em tantas casas decimais, o relógio do sistema na máquina que está executando a consulta não necessariamente atualiza o horário do sistema a cada 0,000001 segundos. Isso poderia ser a causa?
youcantryreachingme