而不是依靠難以理解的計算不明確地有你的工作日期,並從那裏選擇更容易?例如:
DECLARE @NthWorkingDay INT = 33;
DECLARE @holidays TABLE
(
holiday DATE ,
[description] VARCHAR(500)
);
INSERT @holidays
(holiday, description)
VALUES ('20170519', '...'),
('20170501', '...'),
('20170611', '...'),
('20170704', '...');
DECLARE @sunday INT ,
@saturday INT;
-- 1/1/2000 is a known date - Saturday
SET @saturday = DATEPART(WEEKDAY, DATEFROMPARTS(2000, 1, 1));
SET @sunday = DATEPART(WEEKDAY, DATEFROMPARTS(2000, 1, 2));
WITH tally
AS (SELECT TOP 5000
ROW_NUMBER() OVER (ORDER BY t1.object_id) AS N
FROM master.sys.all_columns t1
CROSS JOIN master.sys.all_columns t2
),
dates (theDate)
AS (SELECT DATEADD(DAY, N - 1, CAST(GETDATE() AS DATE))
FROM tally
),
workDates (workingDay, workingDate)
AS (SELECT ROW_NUMBER() OVER (ORDER BY theDate) ,
theDate
FROM dates
WHERE DATEPART(WEEKDAY, theDate) NOT IN (@saturday, @sunday)
AND theDate NOT IN (SELECT holiday
FROM @holidays)
)
SELECT workingDate
FROM workDates
WHERE workingDay = @NthWorkingDay;
你在哪裏指定假期或是指? –
你可以發表一些輸入和預期輸出的例子,顯示你的假期表嗎? –
使用日曆表來避免這些難以讀取和維護計算。 –