В SQL Server 2008 има date
тип данни, който няма прикачено време. По този начин можете да премахнете времевата част доста лесно, просто като конвертирате, след което изпълните DateAdd
.
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Това ще върне date
тип данни. За да принудите да бъде datetime
отново можете просто да добавите още едно Convert
:
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Може да не се нуждаете от изрично преобразуване в datetime
, обаче.
Забележка:„Преди един месец от днес“ може да се дефинира по много различни начини. Начинът, по който работи в SQL сървъра, е да върне деня от предходния месец, който е най-близък до същия номер на деня като текущия месец. Това означава, че резултатът от този израз, когато се изпълни на 31 март, ще бъде 28 февруари. Така че може да не получите очакваните резултати при определени сценарии, ако не мислите ясно за последиците от това, като например ако сте извършили едно- изчисляване на месеца няколко пъти, очаквайки да получите същия ден в различен месец (като например март -> февруари -> януари).
Вижте демонстрация на живо в SQL Fiddle
Демонстрацията показва стойностите и произтичащите типове данни на всеки израз.