SQL 如何得到两个日期间的工作日(附假期表)
首先,我们有这样一张表
我们要知道两个日期间的工作日天数,相信大家有遇到过这个恶心人的需求,所谓工作日,不简简单单的就是除周六日以外的日子。要考虑到节假日,国庆啊,中秋啊,最让人头疼的是,你根本无法掌控节假日的规律,因为他就是无规律可言。
所以要求出工作日的天数,我们还需要一张假日表,这张表可以帮助我们分清到底那天是节假日,那天是工作日,在末尾我会附上网盘链接,这个表是怎么来的大家应该都清楚,说了无规律,那么只能人工一个个比对了。
基本的需求就是用这两张表关联,求出第一张表的两个日期间的工作日天数即可
我们可以选择这样,一开始我有一个思路,就是求出来日期间的所有天数,然后将此表与假期表关联查询假日有多少天,相减不就正确了,然后我搞了半天才发现,这个好像没办法关联。。所以我们只能用第二种办法。
第二种办法,就是讲第一张表拆分,就例如,将这样的一条数据
拆分为这样
然后再用日期列,去关联假日表的数据,把非工作日的去除,剩下的条数就是工作日的天数。
假日表中:
对应的三天都为工作日,那么最终就是这三条,最后GROUP BY id 列,求出COUNT(*),就是最后的天数,下面上代码。
第一张日期表:[DW].[dbo].[TAB Row Data From ECC temp6]
第二章假日表:[TAB].[dbo].[holiday]
具体字段上边都有对应,请自行更改
SELECTid,[SP PO creation Date],[HUB GI date],COUNT (*) AS COUNT
FROM(SELECTid,[SP PO creation Date],[HUB GI date],DATEADD(DAY,number,[SP PO creation Date]) AS riqiFROM[DW].[dbo].[TAB Row Data From ECC temp6] AS AINNER JOIN master..spt_values AS B ON DATEADD(DAY,number,[SP PO creation Date]) <= [HUB GI date]AND B.[type] = 'P'order by id,riqiAND NOT EXISTS (SELECT1FROM[TAB].[dbo].[holiday] bWHERE[DAY_WORK] = 2AND DATEADD(DAY,number,[SP PO creation Date]) = CONVERT (DATE, [DATE_ID]))) a
GROUP BYid,[SP PO creation Date],[HUB GI date]
最后截图:
接下来大家期待已久的整理出来的假期表:直接上。
链接:https://pan.baidu.com/s/1J9pVGX4xMbsUe69txCGg_Q
提取码:lhaj
SQL 如何得到两个日期间的工作日(附假期表)相关推荐
- oracle计算两个日期间的工作日(根据表配置)
首先新增表用于配置非工作日,工作日,具体配置在程序中处理 DROP TABLE "T_WEEKDAY"; CREATE TABLE "T_WEEKDAY" (& ...
- MYSQL 如何得到两个日期间的工作日(不含周六日,节假日)
写在前面 参考文章 SQL 如何得到两个日期间的工作日(附假期表)_Fuzz-CSDN博客_sql计算日期之间工作日函数 这篇文章使用的是SQL SEVER ,如何转化为 MYSQL 新手尝试两个小 ...
- Python计算两个日期间的工作日(交易日),去除周末节假日
首先区分一下这里的工作日和节假日是不同的. 工作日是指去掉节假日即周末,但是不去掉调休的日期. 交易日主要针对金融行业,是指去掉节假日和周末,因为周末金融市场也是停盘的,所以即使周末因为调休工作,也不 ...
- python获取两个日期间的工作日
python获取两个日期间的工作日 import datetime # 计算两个日期之间的工作日数,非天数. class workDays():def __init__(self, start_dat ...
- 记录一次计算两个日期间的工作日天数,排除节假日、周末等
1.数据库存储节假日.补班日期 数据库结构如下,0代表节日,1代表补班日期,需要每年更新 2.代码 (1)计算相差天数 @Overridepublic Long getWorkDay(String s ...
- SQLServer 计算两个日期间的工作日(排除周六和周日,不排除节假日)
CREATE FUNCTION GetWorkDays(@dt_begin DATETIME , --计算的开始日期@dt_end DATETIME --计算的结束日期) RETURNS INT AS ...
- 计算两个日期间有多少个工作日
function TmainForm.WorksDay( //计算两个日期间有多少个工作日 mStartDate: TDate; //开始日期 mEndDate: TDate //终止日期 ): In ...
- 列出两个日期间的所有日期(使用oracle的rownum实现在sql中使用循环)
oracle中有一个字段rownum,长期以来只知道它是记录的行号,却没有想过用它做更有价值的事情. 有两个时间点,要求列出这两天之间的所有日期,如2010-04-01和2010-04-10,列出 2 ...
- 统计两个日期间工作日的天数
统计两个日期间工作日天数 /*** 将LocalDate转成Date* @param localDate* @return*/public static Date LocalDateToDate(Lo ...
最新文章
- Animation 模拟纸盒的爆破
- dubbo2.5.6从下载到编译成功并且部署成功过程
- perl 远程 mysql_写的一个perl脚本,用于发送远程MySQL命令
- boost::process::ipstream相关的测试程序
- SVN switch 用法详解
- vector的简单实现
- poj-1659-Frogs Neighborhood-(图论-是否可图)
- Linux-进程管理
- python命令行进入帮助模式_Python 命令行之旅:深入 click 之选项篇
- 手机“开口”,化身“智能机器人”
- PR转场插件 MAC版 FilmImpact Transition Pack v1-v2
- 模拟退火算法应用(Java)
- Linux云计算虚拟化-KVM桌面虚拟化技术
- wep加密方式是什么_什么是WEP(有线等效保密)?
- 8月1号起 银行卡、支付宝、微信的这些费用可以省了!
- 鏖战2021年618
- LC振荡器稳定度与品质因数的关系
- outlook自定义快捷键_如何在Outlook中关闭或自定义新的电子邮件警报
- 微软快捷键截图_所有最好的Microsoft Word键盘快捷键
- 计算机图形学基础第二版,计算机图形学基础(第2版)课后习题答案__陆枫.pdf