I SQL Server 2008 er der date
datatype, som ikke har nogen tid tilknyttet. Du kan således ganske nemt fjerne tidsdelen ved blot at konvertere og derefter udføre DateAdd
.
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Dette vil returnere en date
datatype. For at tvinge det til at være datetime
igen, du kan blot tilføje en mere Convert
:
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Du har muligvis ikke brug for den eksplicitte konvertering til datetime
dog.
Bemærk:"En måned siden fra i dag" kan defineres på mange forskellige måder. Måden det fungerer i SQL server er at returnere den dag fra den foregående måned, der er tættest på samme dagnummer som den aktuelle måned. Det betyder, at resultatet af dette udtryk, når det køres den 31. marts, vil være den 28. februar. Så du får muligvis ikke forventede resultater i visse scenarier, hvis du ikke tænker klart over konsekvenserne af dette, såsom hvis du udførte en- månedsberegning flere gange, forventer at få den samme dag i en anden måned (såsom at gøre marts -> februar -> januar).
Se en live demo på SQL Fiddle
Demoen viser værdierne og resulterende datatyper for hvert udtryk.