Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ottenere un mese fa da oggi in SQL Server 2008?

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.