如何在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
相关产品推荐
相关产品推荐

