In SQL Server 2008 è presente la date
tipo di dati, che non ha tempo allegato. Puoi quindi rimuovere la porzione di tempo abbastanza facilmente semplicemente convertendo, quindi eseguendo il DateAdd
.
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Questo restituirà una date
tipo di dati. Per forzare che sia datetime
di nuovo, puoi semplicemente aggiungere un altro Convert
:
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Potrebbe non essere necessaria la conversione esplicita in datetime
, però.
Nota:"Un mese fa da oggi" potrebbe essere definito in molti modi diversi. Il modo in cui funziona in SQL Server è restituire il giorno del mese precedente che è il più vicino allo stesso numero del mese corrente. Ciò significa che il risultato di questa espressione quando eseguito il 31 marzo sarà il 28 febbraio. Quindi, potresti non ottenere i risultati attesi in determinati scenari se non pensi chiaramente alle ramificazioni di ciò, come se avessi eseguito l'uno- calcolo del mese più volte, aspettandosi di ottenere lo stesso giorno in un mese diverso (ad esempio marzo -> febbraio -> gennaio).
Guarda una demo dal vivo su SQL Fiddle
La demo mostra i valori e i tipi di dati risultanti di ciascuna espressione.