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

El mejor enfoque para eliminar la parte de la hora de la fecha y la hora en SQL Server

Estrictamente, método a es el que menos recursos consume:

a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

Probado menos intensivo de CPU para la misma duración total de un millón de filas por alguien con demasiado tiempo en sus manos:¿La forma más eficiente en SQL Server para obtener una fecha de fecha+hora?

También vi una prueba similar en otro lugar con resultados similares.

Prefiero DATEADD/DATEDIFF porque:

  • varchar está sujeto a problemas de idioma/formato de fecha
    Ejemplo:¿Por qué mi expresión CASE no es determinista?
  • float depende del almacenamiento interno
  • se extiende para calcular el primer día del mes, mañana, etc. cambiando la base "0"

Editar, octubre de 2011

Para SQL Server 2008+, puede CAST a date es decir, CAST(getdate() AS date) . O simplemente use date tipo de datos por lo que no hay time para eliminar.

Editar, enero de 2012

Un ejemplo práctico de cuán flexible es esto:es necesario calcular por hora o fecha redondeada en el servidor sql

Editar, mayo de 2012

No use esto en cláusulas WHERE y similares sin pensar:agregar una función o CAST a una columna invalida el uso del índice. Vea el número 2 aquí Errores comunes de programación SQL

Ahora, esto tiene un ejemplo de versiones posteriores del optimizador de SQL Server que administran CAST hasta la fecha correctamente, pero generalmente será una mala idea...

Editar, septiembre de 2018, para datetime2

DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'

select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)