SQL to return the number of working days between 2 passed in dates(SQL 返回两个传入日期之间的工作日数)
问题描述
我需要编写一个 sql 查询,返回两个给定日期之间的工作日(周一至周五)数.
I need to write an sql query that returns the number of Working days (Monday - Friday) between two given dates.
我想知道最有效的方法是什么?
I was wondering what would be the most efficient way to do this?
SELECT --Start with total number of days including weekends
(DATEDIFF(dd,@StartDate,@EndDate)+1) --Subtact 2 days for each full weekend
(DATEDIFF(wk,@StartDate,@EndDate)*2) --If StartDate is a Sunday, Subtract 1
ELSE 0 END) --If EndDate is a Saturday, Subtract 1
FROM dual
然后,能够从该计数中删除假期(例如圣诞节和节礼日)也会很有帮助.
Then it would also be helpful to be able to remove holidays from this count such as christmas day and boxing day.
有什么想法吗?
推荐答案
计算两个日期之间的工作日数的简单方法是:
an easy way to calculate to number of weekdays between 2 dates is :
SELECT
date1,
date2,
((date2-date1)-2*FLOOR((date2-date1)/7)-DECODE(SIGN(TO_CHAR(date2,'D')-
TO_CHAR(date1,'D')),-1,2,0)+DECODE(TO_CHAR(date1,'D'),7,1,0)-
DECODE(TO_CHAR(date2,'D'),7,1,0))*24 as WorkDays
FROM
tablename
ORDER BY date1,date2
这篇关于SQL 返回两个传入日期之间的工作日数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:SQL 返回两个传入日期之间的工作日数
基础教程推荐
- 带更新的 sqlite CTE 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
