Cómo obtener la fecha actual sin la parte de tiempo

83

En SQL Server 2005, ¿cómo obtengo la fecha actual sin la parte de tiempo? He estado usando GETDATE()pero me gustaría tener un tiempo de 00: 00: 00.0

Muelles Myers
fuente

Respuestas:

119

El más rápido si tiene que iterar sobre un conjunto de registros y no tiene fecha en SQL Server 2008

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

Dos respuestas diferentes y excelentes en StackOverflow lo confirman: uno , dos

Las conversiones de Varchar son una de las peores formas de hacerlo. Por supuesto, por un valor puede que no importe, pero es un buen hábito.

De esta manera también es determinista, por ejemplo, si desea indexar una columna calculada. Incluso las personas que escriben libros sobre SQL Server quedan atrapadas con las conversiones de fecha y hora

Esta técnica también es extensible.

  • ayer: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • inicio de mes: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • fin del mes pasado: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • inicio del próximo mes: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Editar:

Como mencioné sobre el determinismo, los métodos varchar no son seguros a menos que use el estilo 112.

Otras respuestas aquí señalan que nunca aplicarías esto a una columna. Esto es correcto, pero es posible que desee seleccionar 100k filas o agregar una columna calculada o GROUP BY solo. Entonces tienes que usar este método.

La otra respuesta también menciona el estilo 110. Este no es el idioma o SET DATEFORMAT seguro y falla con la configuración de idioma "británico". Consulte la guía definitiva sobre los tipos de datos de fecha y hora de Tibor Karaszi.

gbn
fuente
1
El enlace provisto está muerto.
Viswanathan Iyer
6

Debe convertirlo a varchar especificando un patrón de formato (110 en este caso) y luego convertir (o convertir) de nuevo a fecha y hora.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
mrdenny
fuente