如何将假日表合并到下面的SQL中?结果返回第一个工作日,但自从1/1/18是星期一假期,我需要工作日2。
DECLARE @DATE DATETIME;
SET @DATE = '1/1/2018';
SELECT
CASE
WHEN DATENAME(WEEKDAY, DATEADD(mm, DATEDIFF(MM, 0, @DATE), 0)) = 'Saturday'
THEN DATEADD(mm, DATEDIFF(MM, 0, @DATE), 0) + 2
WHEN DATENAME(WEEKDAY, DATEADD(mm, DATEDIFF(MM, 0, @DATE), 0)) = 'Sunday'
THEN DATEADD(mm, DATEDIFF(MM, 0, @DATE), 0) + 2
WHEN DATENAME(WEEKDAY, DATEADD(mm, DATEDIFF(MM, 0, @DATE), 0)) = 'Monday'
THEN DATEADD(mm, DATEDIFF(MM, 0, @DATE), 0) + 1
ELSE DATEADD(mm, DATEDIFF(MM, 0, @DATE), 0)
END;
我想这会对你有所帮助,你可以检查这个sqlscript,我给你3个不同的日期来检查正确的答案:
Declare @date date = '01/01/2018' --getdate()
SELECT CASE
WHEN DATENAME(WEEKDAY, dateadd(mm, DATEDIFF(MM, 0, @date), 0)) = 'Saturday'
THEN dateadd(mm, DATEDIFF(MM, 0, getdate()), 0) + 2
WHEN DATENAME(WEEKDAY, dateadd(mm, DATEDIFF(MM, 0, @date), 0)) = 'Sunday'
THEN dateadd(mm, DATEDIFF(MM, 0, @date), 0) + 1
ELSE dateadd(mm, DATEDIFF(MM, 0, @date), 0)
END
set @date = '04/01/2018' --getdate()
SELECT CASE
WHEN DATENAME(WEEKDAY, dateadd(mm, DATEDIFF(MM, 0, @date), 0)) = 'Saturday'
THEN dateadd(mm, DATEDIFF(MM, 0, getdate()), 0) + 2
WHEN DATENAME(WEEKDAY, dateadd(mm, DATEDIFF(MM, 0, @date), 0)) = 'Sunday'
THEN dateadd(mm, DATEDIFF(MM, 0, @date), 0) + 1
ELSE dateadd(mm, DATEDIFF(MM, 0, @date), 0)
END
set @date = '09/01/2018' --getdate()
SELECT CASE
WHEN DATENAME(WEEKDAY, dateadd(mm, DATEDIFF(MM, 0, @date), 0)) = 'Saturday'
THEN dateadd(mm, DATEDIFF(MM, 0, getdate()), 0) + 2
WHEN DATENAME(WEEKDAY, dateadd(mm, DATEDIFF(MM, 0, @date), 0)) = 'Sunday'
THEN dateadd(mm, DATEDIFF(MM, 0, @date), 0) + 1
ELSE dateadd(mm, DATEDIFF(MM, 0, @date), 0)
END