营业日计算

时间:2011-09-16 12:44:14

标签: sql-server-2005

我有一个查询,我通过以下SQL查询计算两天之间的总天数,包括开始日期和结束日期。如果结束日期不为空,则结束日期将被视为当前日期。

此查询完成此任务。但我不想数周六和周日。可能的公共英国假期。(我可以做到这一点,如果我能得到周六和周日的逻辑)

SELECT  DateDiff(day,DateADD(day,-1,StartDate),ISNULL(EndDate,getDate()))numberOfDays
        FROM <mytable>

我如何仅计算两个日期之间的工作日?

谢谢

3 个答案:

答案 0 :(得分:4)

我强烈推荐一个日历表,特别是如果你需要考虑特定的假期。例如,动态地计算复活节将是一种巨大的痛苦。

http://web.archive.org/web/20070611150639/http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html

如果您要单独使用T-SQL,请注意使用依赖于区域/语言设置的函数来输出DATENAME ...

之类的内容。

答案 1 :(得分:2)

看看DATEDIFF MSDN page。 在页面底部,有一些用户生成的内容 一个用户在那里发布了一个功能,它完全符合您的要求,包括假期(标题:“UDF返回工作日数,包括支票到银行假期表”)。

答案 2 :(得分:1)

试试这个

SELECT  DateDiff(day,DateADD(day,-1,StartDate),ISNULL(EndDate,getDate())) - 
( CASE WHEN DATENAME(dw, StartDate) = 'Sunday' OR 
DATENAME(dw,ISNULL(EndDate,getDate())) = 'Sunday' THEN 1 ELSE 0 END)
- ( CASE WHEN DATENAME(dw, StartDate) = 'Saturday' OR 
     DATENAME(dw,ISNULL(EndDate,getDate())) = 'Saturday' THEN 1 ELSE 0 END)
numberOfDays         
FROM <mytable>