SQL忽略嵌套大小写

时间:2015-06-26 08:50:25

标签: sql sql-server-2008 case

我创建了一个Date_Dimension并且遇到了我必须定义的问题" lastworkingdayofmonth"在上面设置一个标志。

我可以处理所有的日子,但是当计算出它们是假日时我不能在前一天设置标志。

请帮帮我:)。

UPDATE  DATE_DIMENSION_001
SET     ISLASTWORKINGDAYMONTH = 
        CASE    WHEN ( CONVERT(VARCHAR(8), lastdayofmonth, 112) = Datekey ) AND IsWeekday = 1 AND IsHolidayAut = 0 THEN 1
                WHEN ( CONVERT(VARCHAR(8), dbo.fn_LastWorkday(FullDate), 112) ) = Datekey AND IsHolidayAut = 0 THEN 1
                WHEN ( CONVERT(VARCHAR(8), dbo.fn_LastWorkday(FullDate), 112) ) = Datekey AND IsHolidayAut = 1 THEN
                    CASE WHEN ( DATEADD(DD, -1, dbo.fn_LastWorkday(FullDate)) ) = CONVERT(DATE, Datekey) THEN 1
                    END
        END 

1 个答案:

答案 0 :(得分:0)

我认为这样的事可能适合你:

UPDATE  dd
SET     ISLASTWORKINGDAYMONTH = 1
FROM
   DATE_DIMENSION_001 dd
     left join
   DATE_DIMENSION_001 dd_anti
     on
        DATEPART(year,dd.FullDate) = DATEPART(year,dd_anti.FullDate) and
        DATEPART(month,dd.FullDate) = DATEPART(month,dd_anti.FullDate) and
        dd_anti.FullDate > dd.FullDate and
        dd_anti.IsWeekday = 1 and
        dd_anti.IsHolidayAut = 0
WHERE
    dd.IsWeekday = 1 and
    dd.IsHolidayAut = 0 and
    dd_anti.FullDate is null

也就是说,我们找到了工作日而不是假期的行,并且(通过dd_antiLEFT JOINnull检查WHERE子句中的行我们找不到同一个月的另一行,但是以后的日期,也是工作日,而不是假期。