I SQL Server 2008 finns date
datatyp, som inte har någon tid kopplad. Du kan alltså ta bort tidsdelen ganska enkelt genom att konvertera och sedan utföra DateAdd
.
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Detta returnerar ett date
data typ. För att tvinga det att vara datetime
igen, du kan helt enkelt lägga till en till Convert
:
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Du kanske inte behöver den explicita konverteringen till datetime
dock.
Notera:"En månad sedan från idag" kan definieras på många olika sätt. Sättet det fungerar i SQL server är att returnera dagen från föregående månad som är närmast samma dagnummer som den aktuella månaden. Detta betyder att resultatet av detta uttryck när det körs den 31 mars kommer att bli 28 februari. Så du kanske inte får förväntade resultat i vissa scenarier om du inte tänker klart på konsekvenserna av detta, till exempel om du utförde en- månadsberäkning flera gånger, förväntar sig att få samma dag i en annan månad (som att göra mars -> februari -> januari).
Se en livedemo på SQL Fiddle
Demon visar värdena och resulterande datatyper för varje uttryck.