2012-09-22 60 views
1

我需要的結果,如果end_dt是不到一個月的15日,它應該考慮比上月日期使用日期函數2008

如 - 如果end_dt08-May-2011比它應該考慮30-APR-2011

我用下面的代碼,但有沒有這樣做的更好方式,

select 
    id, 
    start_dt, 
    end_dt, 
    End_mth = 
     case 
      when end_dt<=DATEADD(YY,(DATEPART(yy,end_dt))-1900,0) + DATEADD(MM,(DATEPART(MM,end_dt))-1,0)+ 15 then month(DATEADD (mm,-1,end_dt)) 
      else month(isnull(end_dt,'31-Mar-2012')) 
     end 
from 
    sd_table 

回答

1

如果END_DT是不到一個月就S的15 HOULD考慮比上月日期e.g - 如果END_DT是08 2011年5月比它應該考慮爲30-APR-2011

下會解決這個問題:

SELECT 
    id, 
    start_dt, 
    end_dt, 
    CASE 
     WHEN DATEPART(dd, end_dt) < 15 THEN DATEADD(dd, -1 * DATEPART(dd, end_dt), end_dt) 
     ELSE end_dt 
    END as End_mth 
from 
    sd_table