【发布时间】:2013-12-06 16:53:34
【问题描述】:
我正在使用 MS SQL 2008 中的日历生成器,需要为当月的每一天生成正确的工作日。一切都在这个例外情况下工作:如果星期五或星期一是假期,那么我得到那个周末(星期六和星期日)的营业日期的错误值。如果星期一(MHDY)是假期,我已经有一列返回值 1,星期五也有一个单独的列(FHldy),我试图做的是在 MHDY 和 FHldy 中分配值 1周六和周日的列,如果之前的周五或之后的周一是节假日。以下是产生上述值的代码部分:
SELECT
MC.[Date]
,MC.[Year]
,MC.[Quarter]
,MC.[Month]
,MC.[Week]
,MC.[Day]
,MC.[DayOfYear]
,MC.[Weekday] -- This has first day of week as Monday
,MC.[KindOfDay]
,MC.[Description]
,CASE WHEN Weekday BETWEEN 1 and 6 THEN Weekday +1
WHEN Weekday = 7 THEN 1 END AS [DayofWeek]
-- This will convert first day of week to Sunday
, CASE WHEN MC.KindOfDay = 'Holiday' THEN 1 ELSE 0 END AS Holiday
, CASE WHEN MC.KindOfDay <> 'BusDay' THEN 1 ELSE 0 END AS NonBDay
, CASE WHEN MC.KindOfDay = 'BusDay' THEN 1 ELSE 0 END AS BDay
, CASE WHEN MC.KindOfDay = 'Holiday' AND MC.Weekday = 1 THEN 1 ELSE 0 END AS MHDY
, CASE WHEN MC.Date = DateAdd(Month, 1, MC.Date - Day(MC.Date) + 1) -1 THEN 1 ELSE 0 END AS LDoM
, CASE WHEN MC.KindOfDay = 'Holiday' AND MC.[Weekday] = 5 THEN 1 ELSE 0 END AS FHldy
INTO #AllC2
FROM #MasterCal MC
日历中的代码比这部分多得多,但这是我试图添加此信息的地方。
有没有办法将 CASE 语句修改为“如果星期一是假日,则将星期六和星期日的值 1 返回给 MHDY”。周五也是如此。
如此接近……这是最后一个障碍。感谢您提供的任何帮助。
【问题讨论】:
标签: sql sql-server-2008 date calendar business-rules