2010-10-14 6 views
16

mam randkę, załóżmy data dzisiajSQL Server 2005: Jak odjąć 6 miesięcy

declare @d datetime 
set @d = '20101014' 

muszę

select @d - <six month> 

gdzie jest rzeczywista liczba dni, która zawiera ostatnie sześć miesiąc, począwszy Z d.

+0

Niestety ale Twoje pytanie jest trochę niejasny; czy pytasz o datę mniejszą niż 6 miesięcy lub datę 6 miesięcy temu? – Kane

+0

Lub liczba dni od daty 6 miesięcy temu? –

+0

ile dni = teraz - 6 miesięcy temu – skaeff

Odpowiedz

41

Można użyć DATEADD:

select DATEADD(month, -6, @d) 

EDIT: jeśli potrzebujesz liczbę dni do 6 miesięcy temu można użyć DATEDIFF:

select DATEDIFF(day, @d, DATEADD(month, -6, @d)) 
+0

W ten sposób otrzymam datę, ale potrzebuję kilku dni – skaeff

+0

Przeczytaj moją zmianę, która powinna wystarczyć. –

1

także sprawdzić się (rozwój ten temat):

Muszę wybrać algorytm w zależności od warunku - jeśli istnieją jako człowiek y dni między dwiema datami jak za 6 miesięcy (przed ostatnią datą).

zrobiłem to w ten sposób:

case 
     when 
     DATEDIFF(day, DATEADD(month, -6, @pDateEnd), @pDateEnd) 
     > 
     DATEDIFF(day, @pDateBegin, @pDateEnd) 
     then 'there is no 6-month difference between two dates' 
     else 'there is 6-month difference ore more between two dates' 
    end