Oracle SQL 有条件的案例
Oracle SQL Case with Condition
我对 Oracle SQL 案例陈述有疑问。
在where条件中我想应用以下条件。
如果 salary_date 为空,则 effective_date 应大于 01-Jan-2016
我试过
case when salary_date is null then
trunc(effective_date) >= '01-JAN-2016' else
null end
但是上面的结果是
ORA-00933: SQL command not properly ended
我该如何解决这个问题?
你可以不用 CASE 语句试试这个
SELECT
..
..
WHERE ( trunc(effective_date) >= '01-JAN-2016' AND salary_date is null )
OR ( <some other condition> )
您的代码的问题是 SQL 解释器希望看到 'then' 关键字后的值,而您有一个条件子句。
也许试试这样的东西:
case when salary_date is null and trunc(effective_date) >= '01-JAN-2016'
then <value you need>
else null
...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 相同。这是我上面做的。
不要...不要...将日期与字符串进行比较。 '01-JAN-2016'
是字符串,不是日期。您必须将其转换为日期,例如 to_date('01-JAN-2016', 'dd-MON-yyyy')
.
或者,作为替代方案,请注意我如何输入 "date literal"(固定日期)。如果我不需要输入一天中的时间,我可以使用表达式 date '2016-01-01'
,这是一个 SQL 标准 (ANSI) "date literal"。那么你不需要给出日期格式模型;它必须始终采用准确的格式 yyyy-mm-dd。
我对 Oracle SQL 案例陈述有疑问。
在where条件中我想应用以下条件。 如果 salary_date 为空,则 effective_date 应大于 01-Jan-2016
我试过
case when salary_date is null then
trunc(effective_date) >= '01-JAN-2016' else
null end
但是上面的结果是
ORA-00933: SQL command not properly ended
我该如何解决这个问题?
你可以不用 CASE 语句试试这个
SELECT
..
..
WHERE ( trunc(effective_date) >= '01-JAN-2016' AND salary_date is null )
OR ( <some other condition> )
您的代码的问题是 SQL 解释器希望看到 'then' 关键字后的值,而您有一个条件子句。
也许试试这样的东西:
case when salary_date is null and trunc(effective_date) >= '01-JAN-2016'
then <value you need>
else null
...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 相同。这是我上面做的。
不要...不要...将日期与字符串进行比较。 '01-JAN-2016'
是字符串,不是日期。您必须将其转换为日期,例如 to_date('01-JAN-2016', 'dd-MON-yyyy')
.
或者,作为替代方案,请注意我如何输入 "date literal"(固定日期)。如果我不需要输入一天中的时间,我可以使用表达式 date '2016-01-01'
,这是一个 SQL 标准 (ANSI) "date literal"。那么你不需要给出日期格式模型;它必须始终采用准确的格式 yyyy-mm-dd。