我想创建一个日期列表,从今天的3年前的1月1日到12月31日,未来2年 . 在第二栏中,我想标记圣诞节(XMAS),新年前夜(NYE),新年(NYD),阵亡将士纪念日(MEM),7月4日(JUL4),劳动节(LABOR) . 对于后3个假期,我不仅需要标注假日日期,还要标注上周六的每一天,以便标记整个长周末 . 否则使用工作日名称标记日期 .
SELECT STAYDATE,
CASE
WHEN TO_CHAR(STAYDATE,'MM')=12 AND TO_CHAR(STAYDATE,'DD')=25 THEN 'XMAS'
WHEN TO_CHAR(STAYDATE,'MM')=12 AND TO_CHAR(STAYDATE,'DD')=31 THEN 'NYE'
WHEN TO_CHAR(STAYDATE,'MM')=01 AND TO_CHAR(STAYDATE,'DD')=01 THEN 'NYD'
WHEN TO_CHAR(STAYDATE,'MM')=7 AND TO_CHAR(STAYDATE,'DD')=04 THEN 'JUL4'
ELSE
TO_CHAR(STAYDATE,'dy') END DAYLABEL
FROM (
SELECT TRUNC (add_months(sysdate,24) - ROWNUM) STAYDATE
FROM DUAL CONNECT BY ROWNUM < 1000)
2 回答
SQL Fiddle
Query 1 :
Results :
您还可以使用SCHEDULE对象 . 在我看来,Calendaring Syntax提供了比原生DATE功能更多的灵活性 .
然后你会使用类似这样的日程表: