我使用此查询来获取除周末之外的最后一个营业日期:
DECLARE @LastBizDate as DATETIME
SELECT @LastBizDate = (DATEADD(DAY, CASE DATENAME(WEEKDAY, GETDATE())
WHEN 'Saturday' THEN -1
WHEN 'Sunday' THEN -2
ELSE -1 END, DATEDIFF(DAY, 0, GETDATE())))
SELECT @LastBizDate AS 'Last_Business_Date'
但我怎样才能排除假期?
我有这个带有示例数据的tbl_Holidays
表:
-------------------------
|Holiday_Date |
|-----------------------|
|2017-04-14 00:00:00.000|
|2017-05-01 00:00:00.000|
|2017-10-18 00:00:00.000|
|2017-12-25 00:00:00.000|
-------------------------
注意:无需考虑假期是在星期日,那么星期一将被视为关闭。同样,不需要考虑那个。
提前谢谢。
答案 0 :(得分:1)
我认为你需要一个循环才能做到这一点。
在排除星期六和星期日之后,您需要检查日期是否在假期表中。再次,您需要检查日期(从假日表中排除后计算)是在星期日和星期六。
DECLARE @last_wrk_day DATETIME
,@today DATETIME
DECLARE @TblHoliday AS TABLE (Holiday_Date DATE)
INSERT INTO @TblHoliday
VALUES ('2017-04-14 00:00:00.000')
,('2017-05-01 00:00:00.000')
,('2017-10-18 00:00:00.000')
,('2017-12-25 00:00:00.000')
,('2017-04-13 00:00:00.000')
SET @today = '2017-04-10 00:00:00.000' --getdate()
SET @last_wrk_day = dateadd(day, - 1, @today)
WHILE (
(
SELECT TOP 1 1
FROM @TblHoliday
WHERE Holiday_Date = @last_wrk_day
) = 1
OR DATEPART(dw, @last_wrk_day) IN (1, 7)
)
BEGIN
SET @last_wrk_day = dateadd(day, - 1, @last_wrk_day)
END
SELECT @last_wrk_day
输出
2017-04-13 00:00:00.000