【问题标题】:How to exclude bank holidays from working days calculation?如何从工作日计算中排除银行假期?
【发布时间】: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)并将您的数据更新为表明这些不是工作日。

标签: sql days bank


【解决方案1】:

试试这个,我觉得应该可以的

SELECT COUNT(1)
    FROM  bankholidays
    WHERE (@Region = 1 and Column1 BETWEEN @StartDate AND @EndDate)
    or (@Region = 2 and Column2 BETWEEN @StartDate AND @EndDate
    or (@Region not in (1,2) and Column3 BETWEEN @StartDate AND @EndDate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多