这是一个带有CASE条件语句的select查询的where子句 . 我写这篇文章是为了满足以下要求:“如果是任何工作日,结果将包含第二天的日期,如果是星期五,结果将包括星期六,星期日和星期一的日期”
where DTTM IN (case
when to_char(sysdate,'day') <> 'friday ' then to_date(sysdate+1,'DD/MON/YY')
else (select to_date(sysdate+1,'DD/MM/YYYY') + level - 1 ddate
from dual
connect by level <= to_date(sysdate+4,'DD/MM/YYYY') - to_date(sysdate+1,'DD/MM/YYYY')
)
end)
我也使用了 IN ,但是我收到了一个错误
ORA-01427:单行子查询返回多行00000 - “单行子查询返回多行”
请帮我解决这个错误 .
以下是供您参考的完整查询:
select * from orders
where DTTM IN (case
when to_char(sysdate,'day') <> 'friday ' then to_date(sysdate+1,'DD/MON/YY')
else (select to_date(sysdate+1,'DD/MM/YYYY') + level - 1 ddate
from dual
connect by level <= to_date(sysdate+4,'DD/MM/YYYY') - to_date(sysdate+1,'DD/MM/YYYY')
)
end)
order by DTTM;
1 回答
尝试以下解决方案 .
第一个查询将在不是星期五的情况下运行 . 如果是星期五那么它将不会返回任何结果 . UNION ALL之后的查询仅在星期五运行 . 只有查询才会返回结果 .