case表达式的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了case表达式的用法相关的知识,希望对你有一定的参考价值。

参考技术A

1.Case 表达式返回的是一个确定的value,如果没有else,若前面的都不匹配,则返回null。<else 不是必须的,都没有匹配返回null,这与pl/sql 中的case 语句不同,case 语句如果不写else,都没有匹配,则报case_not_found异常>
2.简单case 中的表达式,when 后面的表达式类型应该全部保持一致。如:
select case 'a' when 'a' then 1 when 9 then 3 end from dual;--所有的when 类型必须与第case之后的表达式值类型保持一致,资料的9应该是’9’,没有自动转换成char,和一般的sql中自动转换不同。
3.所有的then 后面的return_value类型要保持一致
select case 'a' when 'a' then '1' when '9' then '3' else 3 end from dual;--红色部分类型应该保持一致,没有自动转换,else后面的3应该是’3’.
4.对于简单case 表达式,也就是case 表达式 when…那么when null 总是取不到。也就是case 后面的表达式如果值为null,不会与when null 匹配,只会与else 匹配。如:
select case null when null then 'null' else 'not matched!' end from dual;--case的null不会与when后面的null匹配,只会返回else的结果。
关于这点,如果case 后面的表达式有可能为null,如果需要匹配null,那么可以使用decode 和searched case。 decode(exp,
value1,res1,
value2,res2,….,
valuen resn,
elsevalue)。
如果其中有存在exp为null,那么如果valuei中有null,则会匹配,返回resi。如:
select decode(null,'a1','1','a2','2',null,'null','not know!') from dual;--返回字符串null case when
condition_1 then value1
when condition_2 then value2…
when condtion_i then valuei
else
elsevalue
end
如果要匹配null,只需要 case when exp is null then ..就可以了
5.对于searched case来说,有自动类型转换,只要条件成立就可以。如:select case when 1='1' then 1 end from dual;--1=’1’条件成立
6.参数最高限制255 个。包括case exp 中的exp 和else 中的,以及when exp1 value 1 算两个参数。如果语句复杂,超过这个限制,可以考虑使用嵌套case。

以上是关于case表达式的用法的主要内容,如果未能解决你的问题,请参考以下文章

c语言中while 、for、switch、case的用法?

SQL语句中Case 的用法

c语言中case的意思和用法

SQL语句中case,when,then的用法

switch语句的用法

SQLServer之Case用法