2010-10-14 2 views
16

ho un appuntamento, supponiamo data odiernaSQL Server 2005: come sottrarre sei mesi

declare @d datetime 
set @d = '20101014' 

ho bisogno

select @d - <six month> 

dove è il numero effettivo di giorni che contiene ultimi sei mesi, a partire da @d.

+0

Spiacente, la tua domanda è un po 'poco chiaro; stai chiedendo la data meno di 6 mesi o la data di 6 mesi fa? – Kane

+0

O il numero di giorni dalla data di 6 mesi fa? –

+0

quanti giorni = ora - 6 mesi fa – skaeff

risposta

41

È possibile utilizzare DATEADD:

select DATEADD(month, -6, @d) 

EDIT: se è necessario il numero di giorni fino a 6 mesi fa è possibile utilizzare DATEDIFF:

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

In questo modo riceverò la data, ma ho bisogno di un numero di giorni – skaeff

+0

Leggi la mia modifica, che dovrebbe fare il trucco. –

1

controllare anche questo in su (in via di sviluppo questo tema):

ho bisogno di scegliere l'algoritmo a seconda delle condizioni - se ci sono come uomo y giorni tra due date come in 6 mesi (fa dall'ultima data).

ho fatto in questo modo:

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