Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SYSDATETIME() vs GETDATE() no SQL Server:Qual é a diferença?


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.