我有一个关于 Oracle SQL 案例语句的问题。
在 where 条件下,我想应用以下条件。如果salary_date 为空,则 Effective_date 应大于 2016 年 1 月 1 日
我试过了
case when salary_date is null then
trunc(effective_date) >= '01-JAN-2016' else
null end
然而以上导致
ORA-00933: SQL 命令未正确结束
我该如何解决这个问题?
您的代码的问题是 SQL 解释器希望在 'then' 关键字之后看到该值,而您有一个条件子句。
尝试这样的事情也许:
case when salary_date is null and trunc(effective_date) >= '01-JAN-2016'
then <value you need>
else null
您可以在没有 CASE 语句的情况下尝试此操作
SELECT
..
..
WHERE ( trunc(effective_date) >= '01-JAN-2016' AND salary_date is null )
OR ( <some other condition> )
...where salary_date is not null or effective_date >= date '2016-01-01'
由于 Oracle SQL 没有“IF... THEN”,因此请使用基本逻辑来转换您的布尔表达式。IF a THEN b 与 (NON a) OR b 相同。这就是我上面所做的。
DO...NOT... 将日期与字符串进行比较。'01-JAN-2016'是字符串,不是日期。您必须将其转换为日期,例如使用to_date('01-JAN-2016', 'dd-MON-yyyy').
或者,作为替代方案,请注意我如何输入“日期文字”(固定日期)。如果我不需要输入一天中的某个时间,我可以使用表达式date '2016-01-01',它是一个 SQL 标准 (ANSI) “日期文字”。那么就不需要给出日期格式模型了;它必须始终采用精确的格式 yyyy-mm-dd。