O SQL Server tem várias funções que retornam a data/hora atual. Dois deles são o
GETDATE()
e SYSDATETIME()
funções. À primeira vista, essas duas funções parecem fazer a mesma coisa:obter a data e hora atuais do sistema operacional do computador em que a instância do SQL Server está sendo executada.
No entanto, há uma diferença sutil entre os dois.
A diferença? O tipo de valor de retorno
A principal diferença entre
GETDATE()
e SYSDATETIME()
está no tipo de valor de retorno. GETDATE()
retorna um datetime valor.SYSDATETIME()
retorna um datetime2(7) valor.
Isso significa que
SYSDATETIME()
tem mais precisão de segundos fracionários que GETDATE()
. Ambas as funções obtêm a data e a hora atuais do sistema operacional do computador em que a instância do SQL Server está sendo executada, mas a precisão fracionária é diferente.
Exemplo
Aqui está um exemplo para demonstrar os diferentes valores que são retornados para cada função:
SELECT GETDATE() AS GETDATE, SYSDATETIME() AS SYSDATETIME;
Resultado:
+-------------------------+-----------------------------+ | GETDATE | SYSDATETIME | |-------------------------+-----------------------------| | 2018-06-13 02:48:27.653 | 2018-06-13 02:48:27.6542371 | +-------------------------+-----------------------------+
Então, como mencionado,
SYSDATETIME()
, que retorna um datetime2(7) valor, tem uma precisão fracionária maior que GETDATE()
, que retorna um datetime valor. O datetime2 tipo de dados também tem um intervalo de datas maior e precisão opcional especificada pelo usuário.
Qual devo usar?
A Microsoft recomenda que usemos datetime2 com nossos valores de data/hora. Esse tipo de dados está alinhado com o padrão SQL e é mais portátil que datetime .
Portanto, use
SYSDATETIME()
a menos que você tenha motivos para não fazê-lo.