2025年 mysql国家法定节假日脚本
查阅相关资料,根据日历表核对数据,获取2025年数据
创建表结构
DROP TABLE IF EXISTS `public_holiday_info`;
CREATE TABLE `public_holiday_info` (
`holiday_id` int(11) NOT NULL AUTO_INCREMENT,
`holiday_name` varchar(20) DEFAULT NULL COMMENT '节假日名称',
`holiday_time` date DEFAULT NULL COMMENT '节假日时间',
`remark` varchar(50) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`holiday_id`),
UNIQUE KEY `unique_day` (`holiday_time`) -- 确保每个日期唯一
) ENGINE=InnoDB AUTO_INCREMENT=117 DEFAULT CHARSET=utf8mb4 COMMENT='节假日';
清空现有数据
TRUNCATE TABLE public_holiday_info;
插入2025年法定节假日和调休日数据
-- 元旦:1月1日(周三)放假1天,不调休。
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`) VALUES
('元旦', '2025-01-01', '法定节假日');
-- 春节:1月28日(农历除夕、周二)至2月4日(农历正月初七、周二)放假调休,共8天。
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`) VALUES
('春节', '2025-01-28', '法定节假日'),
('春节', '2025-01-29', '法定节假日'),
('春节', '2025-01-30', '法定节假日'),
('春节', '2025-01-31', '法定节假日'),
('春节', '2025-02-01', '法定节假日'),
('春节', '2025-02-02', '法定节假日'),
('春节', '2025-02-03', '法定节假日'),
('春节', '2025-02-04', '法定节假日');
--调休:1月26日(周日)、2月8日(周六)上班。
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`) VALUES
('调休', '2025-01-26', '因春节假期调休为工作日'),
('调休', '2025-02-08', '因春节假期调休为工作日');
-- 清明节:4月4日(周五)至6日(周日)放假,共3天。
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`) VALUES
('清明节', '2025-04-04', '法定节假日'),
('清明节', '2025-04-05', '法定节假日'),
('清明节', '2025-04-06', '法定节假日');
-- 劳动节:5月1日(周四)至5日(周一)放假调休,共5天。
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`) VALUES
('劳动节', '2025-05-01', '法定节假日'),
('劳动节', '2025-05-02', '法定节假日'),
('劳动节', '2025-05-03', '法定节假日'),
('劳动节', '2025-05-04', '法定节假日'),
('劳动节', '2025-05-05', '法定节假日');
-- 调休:4月27日(周日)上班。
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`) VALUES
('调休', '2025-04-27', '因劳动节假期调休为工作日');
-- 端午节:5月31日(周六)至6月2日(周一)放假,共3天。
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`) VALUES
('端午节', '2025-05-31', '法定节假日'),
('端午节', '2025-06-01', '法定节假日'),
('端午节', '2025-06-02', '法定节假日');
-- 国庆节、中秋节:10月1日(周三)至8日(周三)放假调休,共8天。
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`) VALUES
('国庆节/中秋节', '2025-10-01', '法定节假日'),
('国庆节/中秋节', '2025-10-02', '法定节假日'),
('国庆节/中秋节', '2025-10-03', '法定节假日'),
('国庆节/中秋节', '2025-10-04', '法定节假日'),
('国庆节/中秋节', '2025-10-05', '法定节假日'),
('国庆节/中秋节', '2025-10-06', '法定节假日'),
('国庆节/中秋节', '2025-10-07', '法定节假日'),
('国庆节/中秋节', '2025-10-08', '法定节假日');
--调休:9月28日(周日)、10月11日(周六)上班。
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`) VALUES
('调休', '2025-09-28', '因国庆节/中秋节假期调休为工作日'),
('调休', '2025-10-11', '因国庆节/中秋节假期调休为工作日');
-- 插入2025年所有周末双休日,并排除已存在的节假日和调休日
INSERT INTO `public_holiday_info` (`holiday_name`, `holiday_time`, `remark`)
SELECT '周末', DATE_ADD(DATE '2025-01-01', INTERVAL n DAY), '周末'
FROM (
SELECT a.N + b.N * 7 AS n
FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a,
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
WHERE DATE_ADD(DATE '2025-01-01', INTERVAL n DAY) <= DATE '2025-12-31'
) numbers
WHERE DAYOFWEEK(DATE_ADD(DATE '2025-01-01', INTERVAL n DAY)) IN (1, 7)
AND DATE_ADD(DATE '2025-01-01', INTERVAL n DAY) NOT IN (
SELECT `holiday_time` FROM `public_holiday_info`
);
-- 删除被调休成工作日的周末记录,以确保这些日子不会被认为是休息日
DELETE FROM `public_holiday_info`
WHERE `holiday_time` IN ('2025-01-26', '2025-02-08', '2025-04-27', '2025-09-28', '2025-10-11')
AND `holiday_name` = '周末';