当前位置:  开发笔记 > 编程语言 > 正文

Oracle:程序在日期的SELECT CASE语句中没有正确分支

如何解决《Oracle:程序在日期的SELECTCASE语句中没有正确分支》经验,为你挑选了1个好方法。

我目前正在开发一个项目,根据它是否是一个公共假日而行为不同(显然还有其他限制因素).为此,我正在尝试创建一个包含日期和一周中某一天的表(将"假日"视为本周的第八天').

我有一个表,我正在寻找假名列表,名称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或类似的东西,但我尝试了一些变化,他们似乎没有工作到目前为止.

有什么建议?



1> Pablo Santa ..:

我认为你的问题是它几乎永远不会达到这种情况:

CASE
     WHEN sysdate IN
       (SELECT h.holidaydate FROM holiday h)

因为,当您将SYSDATE插入到假日表中时,会插入日期时间信息.所以你提到的情况几乎从未执行过.

尝试仅比较案例中日期的重要部分.

CASE
   WHEN TRUNC(SYSDATE) IN (SELECT TRUNC(h.holidaydate) from holiday h)

它应该工作.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有