Oracle - where子句中的复杂case语句

时间:2013-12-10 08:48:58

标签: oracle case where-clause

在Oracle中,我需要设置MYDATE的where子句取决于当前年份。 如果月份等于或大于4月,则将MYDATE限制为当前年份(01.01.YEAR - 31.12.YEAR) ELSE将MYDATE限制为比当前时间早的每个日期。

我需要一个纯SQL解决方案,如果可能的话,不需要PL / SQL。我尝试调整我在网络和stackoverflow.com上找到的内容,但语法错误:

SELECT text, mydate
FROM mytable
WHERE
CASE
    WHEN to_number(TO_CHAR(sysdate, 'MM')) >= 4 -- if month of current year >= april
        THEN mydate >=TRUNC(LAST_DAY(SYSDATE), 'YYYY') --beginning of current year
        AND mydate  < TRUNC(LAST_DAY(SYSDATE)+1, 'YYYY') -- end of current year
    ELSE -- if month of current year < april
        mydate < sysdate;   

有人可以帮助我吗?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

您不需要CASE。只需{WHES中的AND / OR即可。

SELECT text, mydate
FROM mytable
WHERE
   (     to_number(TO_CHAR(sysdate, 'MM')) >= 4 -- if month of current year >= april
     AND mydate >=TRUNC(LAST_DAY(SYSDATE), 'YYYY') --beginning of current year
     AND mydate < TRUNC(LAST_DAY(SYSDATE)+1, 'YYYY') -- end of current year
   ) OR (
         to_number(TO_CHAR(sysdate, 'MM')) < 4 
    AND  mydate < sysdate)
   );