CASE 表达式 - 在 WHEN 部分再添加一个条件
Posted
技术标签:
【中文标题】CASE 表达式 - 在 WHEN 部分再添加一个条件【英文标题】:CASE expression - add one more condition to the WHEN part 【发布时间】:2018-04-01 14:45:35 【问题描述】:我创建了一个 PL/SQL 函数,其中我在 SQL 查询中有一个 case
表达式。这工作正常,但是当我添加另一个 when
条件时,它不会编译。就算我用when ... and 2 > 1
,这个也不编译。
在下面的代码中,注释部分没有正常工作。
我想要的是在我的when
子句中再添加一个检查。请指教。
create or replace function FUNCTION_NAME (date1 in varchar2,value1 in varchar2)
RETURN date
IS
date2 date;
BEGIN
SELECT D DATE2
INTO DATE2 FROM (SELECT CASE (SELECT TO_DATE(MAX(G.DATE3),'DD-MON-YYYY')
FROM TABLE1 G,
TABLE2 N
WHERE G.DATE3=N.DATE3)
WHEN LAST_DAY(TO_DATE(DATE1,'DD-MON-YYYY'))
/* AND MONTHS_BETWEEN (LAST_DAY(TO_DATE(SYSDATE)),
LAST_DAY(TO_DATE(TO_CHAR(DATE1),'DD-MON-YYYY'))) */
THEN LAST_DAY(TO_DATE(DATE1,'DD-MON-YYYY'))
ELSE
TO_DATE('31-DEC-99','DD-MON-YYYY')
END D
FROM DUAL);
RETURN DATE2;
END;
【问题讨论】:
您的键盘似乎有问题,您的大写锁定或 shift 键似乎卡住了。或者只是请停止对我们大喊大叫。 当然,兄弟,请尝试帮助解决编程问题:) 请注意网站为您的帖子添加的标签;通常默认值是相当随机的。我只是删除了对sql developer和plsql developer的引用,与您的问题无关。 嗨@vaibhavsaini,欢迎来到SO。礼貌地提问是获得更多帮助的好方法。您可以编辑您的问题以去掉所有大写字母。 关于术语的更多说明:确实存在 CASE statements,类似于if... then...
并且在 CASE statement 中您可以进行 SQL 查询等.这不是您的代码中的内容。在您的代码中,您有一个 SQL 查询,其中有一个 CASE 表达式。
【参考方案1】:
你所拥有的是一个 case 表达式(不是 case 语句)。
案例表达式有两种:“简单”(case <expr> when val1 then ... when val2 then...
等)和“搜索”(case when condition1 then ... when condition2 then ...
等)
您将 case 表达式编写为简单的 case 表达式。然后,您不能向 WHEN 部分添加条件。您必须将 case 表达式更改为一直“搜索”。
case when (select ...) = last_day(...) AND <your commented condition> THEN .....
编辑 - 在我的答案下方复制澄清评论的一部分。
简单的case表达式:
case x when 1 then ....
也可以写成检索式:
case when x = 1 then ....
这两个在逻辑上是等价的。但是,如果我们想将“AND 3 > 1”添加到 WHEN 部分,则仅适用于 case 表达式的 searched 形式。
【讨论】:
你能重新编写代码并发送好吗???您是否建议在 When Condition 中再次使用 CASE ,因为我不想在那里使用 SQL 查询,而我只是检查 SQL 表达式 O/P 的大小写 @vaibhavsaini - 不,我展示的是你所拥有的。 WHEN 必须紧跟在 CASE 之后。标量子查询与 LAST_DAY... 的相等性必须显式写入(使用等号 = ),因此它是一个可以由逻辑运算符 AND 操作的逻辑条件,因此您可以添加第二个条件。例如:case x when 1 then...
有效。如您所见,case x when 1 and 3 > 1 then...
不起作用;必须是case when x = 1 and 3 > 1 then...
感谢 mathguy 的详细解释。非常感谢您的文章...谢谢【参考方案2】:
有two flavours of CASE
。
简单案例:
select case dummy
when 'X' then 1
end as case_demo
from dual;
搜索案例:
select case
when dummy = 'X' then 1
end as case_demo
from dual;
在您的查询中,您像这样混合它们,这是行不通的:
select case dummy
when 'X' and 1 = 1
then 1
end as case_demo
from dual;
如果切换到“搜索到的CASE”,那么可以添加更多when
条件:
select case
when dummy = 'X' and 1 = 1
then 1
end as case_demo
from dual;
【讨论】:
感谢 William Robertson 的详细解释。非常感谢您的文章...谢谢 感谢 William Robertson 的详细解释。非常感谢您的文章...谢谢以上是关于CASE 表达式 - 在 WHEN 部分再添加一个条件的主要内容,如果未能解决你的问题,请参考以下文章