我有一个查询,我通过以下SQL查询计算两天之间的总天数,包括开始日期和结束日期。如果结束日期不为空,则结束日期将被视为当前日期。
此查询完成此任务。但我不想数周六和周日。可能的公共英国假期。(我可以做到这一点,如果我能得到周六和周日的逻辑)
SELECT DateDiff(day,DateADD(day,-1,StartDate),ISNULL(EndDate,getDate()))numberOfDays
FROM <mytable>
我如何仅计算两个日期之间的工作日?
谢谢
答案 0 :(得分:4)
我强烈推荐一个日历表,特别是如果你需要考虑特定的假期。例如,动态地计算复活节将是一种巨大的痛苦。
如果您要单独使用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>