【发布时间】:2016-10-25 07:43:20
【问题描述】:
这是一个带有 CASE 条件语句的选择查询的 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;
【问题讨论】:
-
CASE语句只能返回一个标量(单个值)。解决方案是更改子查询以返回单行。您能否包含完整的查询,以便我们查看整个逻辑? -
@TimBiegeleisen 谢谢。但是如何获得日期列表作为回报呢?或者有没有其他方法可以满足要求,不使用CASE?
-
这是一个案例表达式。 (case 表达式返回一个值。case 语句(例如在存储过程中)只是代码的条件执行。)
标签: sql oracle select case where-clause