需求背景
在很多业务场景中,需要特殊考虑到一些特殊的法定节假日,这些日期在实际对的业务逻辑中需要特殊计算,所以就需要在对应的库表中增加对应的日期记录,在实际操作时进行绕过
实现方式
在数据库中根据国家规定增加对应日期的调休,即周末也可能为工作日的情况,本次操作执行参考2024年所有调休以及法定节假日(包含双休),使用sql插入数据,有需要可以根据以下SQL进行调整
2025放假安排及对应SQL
2025放假安排
2025年国家增加了两天法定节假,真是可喜可乐哦,自2025年1月1日起,全体公民放假的假日增加2天,其中春节、劳动节各增加1天。
插入SQL
--类型1为工作日,类型2为周末,类型3为法定节假日
INSERT
INTO
T_HOLIDAY
(ID,DATE_STR)
SELECT
ROW_NUMBER() OVER(ORDER BY DAY_YMD) AS ID,
DAY_YMD DATE_STR
FROM
(
SELECT
DAY_YMD,
CASE
WHEN DAY_YMD IN
('20250101', '20250128',
'20250129', '20250130', '20250131', '20250203',
'20250204', '20250404', '20250501', '20250502',
'20250505', '20250602',
'20251001', '20251002', '20251003', '20251006',
'20251006','20251007','20251008') THEN
'3'
WHEN DAY_YMD IN ('20250126', '20250208', '20250427',
'20250928', '20251011') THEN
'1'
ELSE
DAY_TYPE
END DAY_TYPE
FROM
(
SELECT
DAY_YMD,
CASE
WHEN TRIM(TO_CHAR(TO_DATE(DAY_YMD, 'yyyyMMdd'), 'day')) IN
('星期六', '星期日') THEN
'2'
ELSE
'1'
END DAY_TYPE
FROM
(
SELECT
TO_CHAR(TO_DATE('20250101', 'yyyyMMdd') + ROWNUM - 1,
'yyyyMMdd') AS DAY_YMD
FROM
DUAL
CONNECT BY
ROWNUM <=
TRUNC(TO_DATE('20251231', 'yyyyMMdd') -
TO_DATE('20250101', 'yyyyMMdd')) + 1)))
WHERE DAY_TYPE IN (2, 3);
2024放假安排及对应SQL
2024放假安排
插入SQL
以下为插入所有节假日的日期的sql
--类型1为工作日,类型2为周末,类型3为法定节假日
INSERT
INTO
T_HOLIDAY
(ID,DATE_STR)
SELECT
ROW_NUMBER() OVER(ORDER BY DAY_YMD) AS ID,
DAY_YMD DATE_STR
FROM
(
SELECT
DAY_YMD,
CASE
WHEN DAY_YMD IN
('20240101', '20240212',
'20240213', '20240214', '20240215', '20240216',
'20240404', '20240405',
'20240501', '20240502', '20240503', '20240610',
'20240916', '20240917',
'20241001', '20241002', '20241003', '20241004',
'20241007') THEN
'3'
WHEN DAY_YMD IN ('20240204', '20240218', '20240407',
'20240428', '20240511', '20240914', '20240929', '20241012') THEN
'1'
ELSE
DAY_TYPE
END DAY_TYPE
FROM
(
SELECT
DAY_YMD,
CASE
WHEN TRIM(TO_CHAR(TO_DATE(DAY_YMD, 'yyyyMMdd'), 'day')) IN
('星期六', '星期日') THEN
'2'
ELSE
'1'
END DAY_TYPE
FROM
(
SELECT
TO_CHAR(TO_DATE('20240101', 'yyyyMMdd') + ROWNUM - 1,
'yyyyMMdd') AS DAY_YMD
FROM
DUAL
CONNECT BY
ROWNUM <=
TRUNC(TO_DATE('20241231', 'yyyyMMdd') -
TO_DATE('20240101', 'yyyyMMdd')) + 1)))
WHERE DAY_TYPE IN (2, 3);