【发布时间】:2020-02-08 05:38:13
【问题描述】:
当我尝试执行以下查询时,我无法弄清楚缺少什么关键字,我想要的是如果 startDate 和 endDate 存在,则在 else 返回 sysdate-7 数据之间使用。
select * from LARGE_RELATION LR where
(CASE WHEN (STARTDATE IS NOT NULL AND ENDDATE IS NOT NULL)
THEN LR.END_DT BETWEEN to_date(STARTDATE, 'yyyymmdd') and to_date(ENDDATE, 'yyyymmdd')
ELSE (LR.END_DT IS NULL OR LR.END_DT > SYSDATE - 7)
END);
ORA-00905: 缺少关键字 00905. 00000 - “缺少关键字” *原因:
*操作:行错误:3 列:31
【问题讨论】:
-
CASE是一个语句,返回一个值而不是一个条件 -
您发布的是一个 PL/SQL 代码块。您不能在 PL/SQL 中使用 SQL SELECT 语句。您可以使用的是 SELECT ... INTO ... 但您没有尝试使用它 - 您没有声明变量来接受 SELECT 返回的值。真的不清楚您要做什么,但该错误与 PL/SQL 代码中对 SELECT 的这种无效使用有关。顺便说一句,错误消息指向 SELECT 语句的开头,而不是 CASE 事物(位于不同的代码行)。
标签: sql oracle date case between