En SQL Server 2008 existe la date
tipo de datos, que no tiene tiempo adjunto. Por lo tanto, puede eliminar la parte de tiempo con bastante facilidad simplemente convirtiendo y luego realizando DateAdd
.
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Esto devolverá una date
tipo de datos. Para forzar que sea datetime
de nuevo, simplemente puede agregar uno más Convert
:
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Es posible que no necesite la conversión explícita a datetime
, sin embargo.
Nota:"Hace un mes a partir de hoy" podría definirse de muchas maneras diferentes. La forma en que funciona en el servidor SQL es devolver el día del mes anterior que es el más cercano al mismo número de día que el mes actual. Esto significa que el resultado de esta expresión cuando se ejecute el 31 de marzo será el 28 de febrero. Por lo tanto, es posible que no obtenga los resultados esperados en ciertos escenarios si no piensa claramente en las ramificaciones de esto, como si realizara el uno- cálculo del mes varias veces, esperando obtener el mismo día en un mes diferente (como marzo -> febrero -> enero).
Vea una demostración en vivo en SQL Fiddle
La demostración muestra los valores y los tipos de datos resultantes de cada expresión.