1

我需要结果,如果end_dt小于一个月的 15 号,它应该考虑上个月的日期

例如 - 如果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
4

1 回答 1

1

如果 end_dt 小于一个月的 15 日,则应考虑上个月的日期,例如 - 如果 end_dt 为 2011 年 5 月 8 日,则应将其视为 2011 年 4 月 30 日

以下将解决这个问题:

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
于 2012-09-22T08:47:40.003 回答