SQL 如何得到两个日期间的工作日(附假期表)

首先,我们有这样一张表

我们要知道两个日期间的工作日天数,相信大家有遇到过这个恶心人的需求,所谓工作日,不简简单单的就是除周六日以外的日子。要考虑到节假日,国庆啊,中秋啊,最让人头疼的是,你根本无法掌控节假日的规律,因为他就是无规律可言。

所以要求出工作日的天数,我们还需要一张假日表,这张表可以帮助我们分清到底那天是节假日,那天是工作日,在末尾我会附上网盘链接,这个表是怎么来的大家应该都清楚,说了无规律,那么只能人工一个个比对了。 

基本的需求就是用这两张表关联,求出第一张表的两个日期间的工作日天数即可

我们可以选择这样,一开始我有一个思路,就是求出来日期间的所有天数,然后将此表与假期表关联查询假日有多少天,相减不就正确了,然后我搞了半天才发现,这个好像没办法关联。。所以我们只能用第二种办法。

 

第二种办法,就是讲第一张表拆分,就例如,将这样的一条数据

拆分为这样

然后再用日期列,去关联假日表的数据,把非工作日的去除,剩下的条数就是工作日的天数。

假日表中:

对应的三天都为工作日,那么最终就是这三条,最后GROUP BY id 列,求出COUNT(*),就是最后的天数,下面上代码。

第一张日期表:[DW].[dbo].[TAB Row Data From ECC temp6]

第二章假日表:[TAB].[dbo].[holiday]

具体字段上边都有对应,请自行更改

SELECT
	id,
	[SP PO creation Date],
	[HUB GI date],
	COUNT (*) AS COUNT
FROM
	(
		SELECT
			id,
			[SP PO creation Date],
			[HUB GI date],
			DATEADD(
				DAY,
				number,
				[SP PO creation Date]
			) AS riqi
		FROM
			[DW].[dbo].[TAB Row Data From ECC temp6] AS A
		INNER JOIN master..spt_values AS B ON DATEADD(
			DAY,
			number,
			[SP PO creation Date]
		) <= [HUB GI date]
		AND B.[type] = 'P'
		order by id,riqi
		AND NOT EXISTS (
			SELECT
				1
			FROM
				[TAB].[dbo].[holiday] b
			WHERE
				[DAY_WORK] = 2
			AND DATEADD(
				DAY,
				number,
				[SP PO creation Date]
			) = CONVERT (DATE, [DATE_ID])
		)
	) a
GROUP BY
	id,
	[SP PO creation Date],
	[HUB GI date]

 最后截图:

接下来大家期待已久的整理出来的假期表:直接上。

链接:https://pan.baidu.com/s/1J9pVGX4xMbsUe69txCGg_Q 
提取码:lhaj 
 

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值