2026年节假日表SQL

2025节假日表

sql 复制代码
drop TABLE calendar_holiday;
CREATE TABLE calendar_holiday (
    date DATE PRIMARY KEY,
    year INT NOT NULL,
    month INT NOT NULL,
    day INT NOT NULL,
    weekday_name VARCHAR(10) NOT NULL, -- 星期一 ~ 星期日
    is_weekend TINYINT DEFAULT 0,      -- 是否为周末 (0:否, 1:是)
    is_holiday TINYINT DEFAULT 0,      -- 是否为法定节假日 (0:否, 1:是)
    is_workday_adjusted TINYINT DEFAULT 0, -- 是否为调休上班日 (0:否, 1:是)
    holiday_name VARCHAR(50) DEFAULT NULL, -- 节假日名称(如元旦、春节等)
		weekday_type TINYINT DEFAULT 0    -- 日期类型((0:正常上班日, 1:调休上班日, 2:法定节假日 , 3:周末 )
);


select * from calendar_holiday

-- =============================
-- Step 1: 插入 2026 年所有日期(使用数字表生成)
-- =============================

INSERT IGNORE INTO calendar_holiday (
    date,
    year,
    month,
    day,
    weekday_name,
    is_weekend,
    is_holiday,
    is_workday_adjusted,
    holiday_name,
    weekday_type
)
SELECT 
    DATE_ADD('2026-01-01', INTERVAL n DAY) AS date,
    YEAR(DATE_ADD('2026-01-01', INTERVAL n DAY)) AS year,
    MONTH(DATE_ADD('2026-01-01', INTERVAL n DAY)) AS month,
    DAY(DATE_ADD('2026-01-01', INTERVAL n DAY)) AS day,
    DAYNAME(DATE_ADD('2026-01-01', INTERVAL n DAY)) AS weekday_name,
    CASE WHEN DAYOFWEEK(DATE_ADD('2026-01-01', INTERVAL n DAY)) IN (1, 7) THEN 1 ELSE 0 END AS is_weekend,
    0 AS is_holiday,
    0 AS is_workday_adjusted,
    NULL AS holiday_name,
    0 AS weekday_type
FROM (
    -- 生成 0 到 365 的数字(2026 是闰年,共 366 天)
    SELECT 
        a.N + b.N * 10 + c.N * 100 AS n
    FROM 
        (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 
         UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) a,
        (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 
         UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) b,
        (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) c  -- 最多 499,足够
) numbers
WHERE 
    DATE_ADD('2026-01-01', INTERVAL n DAY) <= '2026-12-31';
		
		
-- 元旦:2026-01-01(周四)
UPDATE calendar_holiday SET 
    is_holiday = 1,
    holiday_name = '元旦',
    weekday_type = 2
WHERE date = '2026-01-01';

-- 春节:除夕(2月16日)至初六(2月22日),共7天
UPDATE calendar_holiday SET 
    is_holiday = 1,
    holiday_name = CASE 
        WHEN date = '2026-02-16' THEN '春节(除夕)'
        WHEN date = '2026-02-17' THEN '春节'
        WHEN date = '2026-02-18' THEN '春节'
        WHEN date = '2026-02-19' THEN '春节'
        WHEN date = '2026-02-20' THEN '春节'
        WHEN date = '2026-02-21' THEN '春节'
        WHEN date = '2026-02-22' THEN '春节'
        ELSE '春节假期'
    END,
    weekday_type = 2
WHERE date BETWEEN '2026-02-16' AND '2026-02-22';

-- 春节调休上班:2026-02-15(周日)、2026-02-28(周六)
UPDATE calendar_holiday SET 
    is_workday_adjusted = 1,
    holiday_name = '春节调休上班',
    is_weekend = 0,
    weekday_type = 1
WHERE date IN ('2026-02-15', '2026-02-28');

-- 清明节:2026-04-04(周六)至 04-06(周一),共3天
UPDATE calendar_holiday SET 
    is_holiday = 1,
    holiday_name = CASE 
        WHEN date = '2026-04-05' THEN '清明节'
        ELSE '清明节假期'
    END,
    weekday_type = 2
WHERE date BETWEEN '2026-04-04' AND '2026-04-06';

-- 劳动节:2026-05-01(周五)至 05-03(周日),共3天
UPDATE calendar_holiday SET 
    is_holiday = 1,
    holiday_name = '劳动节',
    weekday_type = 2
WHERE date BETWEEN '2026-05-01' AND '2026-05-03';

-- 劳动节调休:2026-04-26(周日)上班
UPDATE calendar_holiday SET 
    is_workday_adjusted = 1,
    holiday_name = '劳动节调休上班',
    is_weekend = 0,
    weekday_type = 1
WHERE date = '2026-04-26';

-- 端午节:2026-06-20(周六)至 06-22(周一),共3天
UPDATE calendar_holiday SET 
    is_holiday = 1,
    holiday_name = CASE 
        WHEN date = '2026-06-21' THEN '端午节'
        ELSE '端午节假期'
    END,
    weekday_type = 2
WHERE date BETWEEN '2026-06-20' AND '2026-06-22';

-- 中秋节:2026-10-03(周六)
UPDATE calendar_holiday SET 
    is_holiday = 1,
    holiday_name = '中秋节',
    weekday_type = 2
WHERE date = '2026-10-03';

-- 国庆节:2026-10-01(周四)至 10-07(周三),共7天
UPDATE calendar_holiday SET 
    is_holiday = 1,
    holiday_name = CASE 
        WHEN date = '2026-10-01' THEN '国庆节'
        ELSE '国庆节假期'
    END,
    weekday_type = 2
WHERE date BETWEEN '2026-10-01' AND '2026-10-07';

-- 国庆调休上班:2026-09-27(周日)、2026-10-10(周六)
UPDATE calendar_holiday SET 
    is_workday_adjusted = 1,
    holiday_name = '国庆节调休上班',
    is_weekend = 0,
    weekday_type = 1
WHERE date IN ('2026-09-27', '2026-10-10');		


UPDATE calendar_holiday 
SET
    holiday_name = CASE
        WHEN is_workday_adjusted = 1 THEN '调休上班'
        WHEN is_holiday = 1 THEN holiday_name
        WHEN is_weekend = 1 AND is_holiday = 0 AND is_workday_adjusted = 0 THEN '周末休息'
        ELSE '工作日'
    END,
    weekday_type = CASE
        WHEN is_workday_adjusted = 1 THEN 1
        WHEN is_holiday = 1 THEN 2
        WHEN is_weekend = 1 THEN 3
        ELSE 0
    END
WHERE year = 2026;



SELECT * FROM calendar_holiday 
WHERE year = 2026 
ORDER BY date 
LIMIT 10;
相关推荐
这个DBA有点耶33 分钟前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效
数据库·mysql·代码规范
星恒随风34 分钟前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
Alluxio1 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
数据库急诊室_阿哲5 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
青瓦梦滋6 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
慧都小妮子6 小时前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能
Joy T7 小时前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
杨凯凡8 小时前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql
Aloudata8 小时前
Claude 做数据分析的这两年:一份复盘与发展线索
大数据·数据库·人工智能·数据挖掘·数据分析·dataagent
Decay__8 小时前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构