En SQL Server 2005, ¿cómo obtengo la fecha actual sin la parte de tiempo? He estado usando GETDATE()
pero me gustaría que tuviera un tiempo de 00: 00: 00.0
Respuesta
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 Varchar son una de las peores formas de hacerlo. Por supuesto, por un valor puede que no importe, pero es un buen hábito.
Esta forma también es determinista , digamos si desea indexar una columna calculada. Incluso la gente que escribe libros sobre SQL Server se atrapada con las conversiones de fecha y hora
Esta técnica también es ampliable.
- ayer:
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
- comienzo del mes:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
- final del último mes:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
- comienzo 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ía esto a una columna. Esto es correcto, pero es posible que desee seleccionar 100k filas o agregar una columna calculada o GROUP BY dateonly. Luego, debe usar este método.
La otra respuesta también menciona el estilo 110. Esto no es idioma ni SET DATEFORMAT es seguro y falla con la configuración de idioma «británico». Consulte la guía definitiva para los tipos de datos de fecha y hora de Tibor Karaszi.
Comentarios
- Proporcionado lin k está muerto.
Respuesta
Tienes que convertirlo a varchar especificando un patrón de formato (110 en este case) luego convierta (o transmita) de nuevo a datetime.
select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)