Oracle中case用法总结
--case语句的种类: 1.简单case语句 语法: case exp when comexp then returnvalue ... when comexp then returnvalue else returnvalue end case到end之间相当于一个具体的值,可以做运算,取别名,嵌套case 等等。 只要把case到end当作一个运算结果的表达式就可以了。 举例: select cust_last_name, case credit_limit when 100 then 'low' when 5000 then 'high' else 'medium' end from customers; 2.搜索case语句 语法: case when boolean then return value ... when boolean then return value else retur nvalue end 举例: select case when id between 1 and 10 then 'low' when id between 20 and 30 then 'mid' when id between 40 and 50 then 'high' else 'unknow' end from product; --简单case和搜索case之间的区别: 1. 简单case只能是when后面的表达式完全匹配case后的表达式,相当于 =,所以也不能匹配null。 2. searched case可以作为比较条件,那么可以使用like、!=、between ..and、<、=、is null、is not null等,比简单case的使用更加广泛,完全可以替代简单case。 --注意事项: 1.case 表达式返回的是一个确定的value,若前面的都不匹配,则返回else中的项. 2.简单case 中的表达式,when 后面的表达式类型应该全部保持一致. 3.所有的then 后面的return_value类型要保持一致. 4.对于简单case 表达式,也就是case 表达式 when…那么when null 总是取不到。也就是case 后面的表达式如果值为null,不会与when null 匹配,只会与else匹配. 5.对于searched case来说,有自动类型转换,只要条件成立就可以。 如:select case when 1='1' then 1 end from dual; 其中1='1'条件成立 值得一提的是: sql中的case语句与pl/sql中的case语句的不同之处: 前者的else不是必须的,如果没有匹配就返回null;后者的else不写,则报case_not_found异常. --case中嵌套子查询 Case语句中可以使用子查询,但是必须返回一行,不可以是多行. 如: select case (select count(*) as s1 from t1 where a = 1) when (select count(*) as s2 from t1, t2 where t1.a = t2.a and t2.a = 1) then '相等' else '不相等' end from dual;