查询第二天的更多Therms

乔纳斯

嗨,我有一个问题,我需要知道第二天是否是假期。
我已经设置了一个临时表(稍后将成为表),因为我可能会添加其他工作日。

问题线

Holiday Datum   (No column name)
0   2016-02-05  2016-02-05

这应该是因为第二天有一个1作为假期,所以无法弄清楚。我知道第二天检查一下,如果1是“当前日期”

Holiday Datum   (No column name)
0   2016-02-05  2016-02-08

执行力

DECLARE @start DATE
SET @start = '2016-02-01'

DECLARE @end DATE
SET @end = '2016-02-10'

WHILE(@start<=@end)
BEGIN

DECLARE  @Holiday TABLE (Datum DATE,Holiday bit)
INSERT INTO @Holiday 

SELECT 
@start, 
(SELECT CASE 
WHEN DATENAME(WEEKDAY,@start) IN ('Saturday','Sunday')
THEN 1
ELSE 0
END) AS Holiday
SET @start = DATEADD(d,1,@start)
END

SELECT * FROM @Holiday

SELECT h.Holiday,h.Datum,
(SELECT
 CASE  

  WHEN DATEADD(d,1,h.Datum) = DATEADD(d,1,h.Datum) AND h.Holiday = 1
  THEN (SELECT TOP 1 Datum FROM @Holiday WHERE Datum > h.Datum AND Holiday = 0 )

  ELSE h.Datum
  END)

FROM @Holiday h
候选者

方法1:

由于您正在为@Holiday生成值并且已对其进行排序,因此可以对两个表进行联接和排序,以便在第二天查看,如下所示:

SELECT t.h1Datum AS Datum ,
       t.Holiday ,
       t.IsNextDayAHoliday FROM(
    SELECT ROW_NUMBER() OVER (PARTITION BY h1.Datum ORDER BY h1.Datum ASC) Nr,
    h1.Datum h1Datum, h1.Holiday Holiday, h2.Holiday IsNextDayAHoliday
    FROM @Holiday h1 LEFT JOIN @Holiday h2 ON  h1.Datum < h2.Datum
) t WHERE nr = 1

结果是这样的:

Datum   Holiday IsNextDayAHoliday
2016-02-01  0   0
2016-02-02  0   0
2016-02-03  0   0
2016-02-04  0   0
2016-02-05  0   1
2016-02-06  1   1
2016-02-07  1   0
2016-02-08  0   0
2016-02-09  0   0
2016-02-10  0   NULL

如您所见,最后一天为空,因为它不包含在@Holiday表中。

方法二:

另一种方法是使用CROSS APPLY该函数来计算假期是什么:

SELECT Datum ,
       Holiday,
       IsHolidayCalc.IsNextDayAHoliday
FROM @Holiday
CROSS APPLY (SELECT IIF(DATENAME(WEEKDAY, DATEADD(DAY, 1, Datum)) IN ('Saturday','Sunday'), 1, 0) IsNextDayHoliday) IsHolidayCalc

现在,结果没有NULL可以处理:

Datum   Holiday IsNextDayHoliday
2016-02-01  0   0
2016-02-02  0   0
2016-02-03  0   0
2016-02-04  0   0
2016-02-05  0   1
2016-02-06  1   1
2016-02-07  1   0
2016-02-08  0   0
2016-02-09  0   0
2016-02-10  0   0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章