You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle日历中添加节假日标记列(Y/N)

解决Oracle日历添加节假日标记列的问题

你可以通过关联节假日表的方式,在日历查询中添加标记列,判断日期是否为节假日。以下是两种可行的实现方式:

方式一:LEFT JOIN + CASE判断

通过左连接日历和节假日表,根据连接结果是否为空来标记Y/N:

CREATE TABLE holidays (holiday_date) AS
SELECT TRUNC(SYSDATE, 'YY') + INTERVAL '39' DAY FROM DUAL;

WITH calendar AS (
    SELECT rownum - 1 AS daynum
    FROM dual
    CONNECT BY rownum <= TO_DATE('28-feb-2023') - TO_DATE('1-feb-2023') + 1
)
SELECT 
    TO_DATE('1-feb-2023') + daynum AS monthdate,
    CASE WHEN h.holiday_date IS NOT NULL THEN 'Y' ELSE 'N' END AS is_holiday
FROM calendar c
LEFT JOIN holidays h 
    ON TO_DATE('1-feb-2023') + c.daynum = h.holiday_date;

方式二:EXISTS子查询

直接在SELECT子句中用EXISTS判断当前日期是否存在于节假日表中:

CREATE TABLE holidays (holiday_date) AS
SELECT TRUNC(SYSDATE, 'YY') + INTERVAL '39' DAY FROM DUAL;

WITH calendar AS (
    SELECT rownum - 1 AS daynum
    FROM dual
    CONNECT BY rownum <= TO_DATE('28-feb-2023') - TO_DATE('1-feb-2023') + 1
)
SELECT 
    TO_DATE('1-feb-2023') + daynum AS monthdate,
    CASE 
        WHEN EXISTS (
            SELECT 1 
            FROM holidays h 
            WHERE h.holiday_date = TO_DATE('1-feb-2023') + c.daynum
        ) THEN 'Y' 
        ELSE 'N' 
    END AS is_holiday
FROM calendar c;

说明

两种方式都会将2023年2月8日标记为Y,其余日期标记为N,完全符合你的测试需求。如果后续节假日表中添加更多日期,查询会自动识别并标记。

内容的提问来源于stack exchange,提问作者Beefstu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:55:20