【发布时间】:2016-11-30 14:00:56
【问题描述】:
我已经能够显示工作日以外的工作日。 但现在我需要知道如何排除银行假期。请帮忙?
这是我当前的代码:
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = '2016/01/01'
SET @EndDate = '2017/01/01'
SELECT
(DATEDIFF(dd, @StartDate, @EndDate) + 1)
-(DATEDIFF(wk, @StartDate, @EndDate) * 2)
-(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END)
DECLARE @TotalDays INT,@WorkDays INT
SET @TotalDays = (DATEDIFF(dd, @StartDate, @EndDate) +1)
print @TotalDays
【问题讨论】:
-
标记您正在使用的 dbms。 (该代码与 ANSI SQL 相差甚远。)
-
您是否考虑过创建一个可以将这些日期标记为非工作日的日期表? mssqltips.com/sqlservertip/4054/…
-
不,我没有,你能帮我如何创建它们并排除它们吗?
-
好的,我提供的链接让您了解如何创建日历表。您希望这是您数据库中的正确表。您可以创建一个位数据类型的列,说明一天是否是工作日。然后,您可以链接到此表并将两个日期之间的 1 相加,以计算出它们之间的工作日数。
-
关于假期是什么,我不知道您在哪个国家/地区。但是您想获得一个列表(英国类似于gov.uk/bank-holidays)并将您的数据更新为表明这些不是工作日。