【发布时间】:2021-02-05 12:30:03
【问题描述】:
我想用 SQL case 表达式选择“up_year”。
如果我这样做没问题:
SELECT CASE WHEN column1 = '2020' then 'up_year' else 'past_year' else end ;
但是当尝试这样做时:不想每年都改变。
SELECT
CASE WHEN column1 = (select extract(year from sysdate) from dual)
then 'up_year'
else 'past_year' else end ;
【问题讨论】:
-
等式右边不需要“select ... from dual”。将其写为“当 column1 = extract(year from sysdate) 时的情况”
-
PL/SQL 与此有什么关系?您所展示的是纯 SQL。请理解 PL/SQL 不是“Oracle SQL”的别称。另外:普通 SQL 只有 case expressions,没有 case statements,而且实际上你帖子中的所有内容都是 case expressions。 (CASE statements 确实存在 - 在 PL/SQL 中!)我将编辑您的帖子以进行这些更正;如果我理解错了,你可以改回来。
-
最重要的是:你的问题是什么,真的吗?您是否遇到错误,但您不明白为什么?这与子SELECT无关;相反,您在“end”之前有一个不正确的“else”。您在表达式中已经有了正确的“else”。最好不要使用子 SELECT,但这不是导致当前语句错误的原因。