sql >> Base de Datos >  >> RDS >> Sqlserver

SYSDATETIME() vs GETDATE() en SQL Server:¿Cuál es la diferencia?

SQL Server tiene un montón de funciones que devuelven la fecha/hora actual. Dos de estos son GETDATE() y SYSDATETIME() funciones.

A primera vista, estas dos funciones parecen hacer lo mismo:obtener la fecha y la hora actuales del sistema operativo de la computadora en la que se ejecuta la instancia de SQL Server.

Sin embargo, hay una diferencia sutil entre los dos.

¿La diferencia? El tipo de valor de retorno

La principal diferencia entre GETDATE() y SYSDATETIME() está en el tipo de valor devuelto.

  • GETDATE() devuelve una fechahora valor.
  • SYSDATETIME() devuelve una fecha y hora2(7) valor.

Esto significa que SYSDATETIME() tiene más precisión de fracciones de segundo que GETDATE() .

Ambas funciones obtienen la fecha y la hora actuales del sistema operativo de la computadora en la que se ejecuta la instancia de SQL Server, pero la precisión fraccionaria es diferente.

Ejemplo

Aquí hay un ejemplo para demostrar los diferentes valores que se devuelven para cada función:

SELECT 
    GETDATE() AS GETDATE,
    SYSDATETIME() AS SYSDATETIME;

Resultado:

+-------------------------+-----------------------------+
| GETDATE                 | SYSDATETIME                 |
|-------------------------+-----------------------------|
| 2018-06-13 02:48:27.653 | 2018-06-13 02:48:27.6542371 |
+-------------------------+-----------------------------+

Entonces, como se mencionó, SYSDATETIME() , que devuelve un datetime2(7) valor, tiene una precisión fraccionaria mayor que  GETDATE() , que devuelve una fecha y hora valor.

La fechahora2 el tipo de datos también tiene un intervalo de fechas más amplio y una precisión opcional especificada por el usuario.

¿Cuál debo usar?

Microsoft recomienda que usemos datetime2 con nuestros valores de fecha/hora. Este tipo de datos se alinea con el estándar SQL y es más portátil que datetime .

Por lo tanto, use SYSDATETIME() a menos que tenga motivos para no hacerlo.