首先,我们有这样一张表
我们要知道两个日期间的工作日天数,相信大家有遇到过这个恶心人的需求,所谓工作日,不简简单单的就是除周六日以外的日子。要考虑到节假日,国庆啊,中秋啊,最让人头疼的是,你根本无法掌控节假日的规律,因为他就是无规律可言。
所以要求出工作日的天数,我们还需要一张假日表,这张表可以帮助我们分清到底那天是节假日,那天是工作日,在末尾我会附上网盘链接,这个表是怎么来的大家应该都清楚,说了无规律,那么只能人工一个个比对了。
基本的需求就是用这两张表关联,求出第一张表的两个日期间的工作日天数即可
我们可以选择这样,一开始我有一个思路,就是求出来日期间的所有天数,然后将此表与假期表关联查询假日有多少天,相减不就正确了,然后我搞了半天才发现,这个好像没办法关联。。所以我们只能用第二种办法。
第二种办法,就是讲第一张表拆分,就例如,将这样的一条数据
拆分为这样
然后再用日期列,去关联假日表的数据,把非工作日的去除,剩下的条数就是工作日的天数。
假日表中:
对应的三天都为工作日,那么最终就是这三条,最后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