0

我有一个关于 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 命令未正确结束

我该如何解决这个问题?

4

3 回答 3

1

您的代码的问题是 SQL 解释器希望在 'then' 关键字之后看到该值,而您有一个条件子句。

尝试这样的事情也许:

case when salary_date is null and trunc(effective_date) >= '01-JAN-2016' 
     then <value you need> 
     else null
于 2016-10-15T08:17:58.170 回答
0

您可以在没有 CASE 语句的情况下尝试此操作

SELECT
..
..
WHERE ( trunc(effective_date) >= '01-JAN-2016' AND salary_date is null ) 
OR ( <some other condition> )
于 2016-10-15T08:14:10.600 回答
0
...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。

于 2016-10-15T13:13:49.053 回答