我目前正在开发一个项目,根据它是否是一个公共假日而行为不同(显然还有其他限制因素).为此,我正在尝试创建一个包含日期和一周中某一天的表(将"假日"视为本周的第八天').
我有一个表,我正在寻找假名列表,名称holiday
,只有一个字段,holidaydate
(DATE
数据类型).我正在尝试将值放入的表daydates
以两个字段day
(DATE
数据类型)和dayofweek
(CHAR(10)
数据类型)命名.
这是我现在拥有的逻辑,而我正在测试.
INSERT INTO holiday (holidaydate) SELECT sysdate FROM dual; SELECT sysdate, ( CASE WHEN sysdate IN (SELECT h.holidaydate FROM holiday h) THEN 'holiday' ELSE TO_CHAR(sysdate , 'day') END) FROM dual;
不幸的是,它目前正在回归,比如"周三",而不是"假期".我有一种感觉,我需要改变WHEN sysdate IN
一个WHEN to_char (sysdate, 'dd-mon-yyyy') IN
或类似的东西,但我尝试了一些变化,他们似乎没有工作到目前为止.
有什么建议?
我认为你的问题是它几乎永远不会达到这种情况:
CASE WHEN sysdate IN (SELECT h.holidaydate FROM holiday h)
因为,当您将SYSDATE插入到假日表中时,会插入日期和时间信息.所以你提到的情况几乎从未执行过.
尝试仅比较案例中日期的重要部分.
CASE WHEN TRUNC(SYSDATE) IN (SELECT TRUNC(h.holidaydate) from holiday h)
它应该工作.