说实话case when函数不算是oracle数据库特有的函数,但是在平时中又是很常用到的,所以挑到这里说一下。这里说一个插曲,在进入现在工作公司的面试题中有三道关于sql的,其中有一道就是需要用到case when函数,由于之前学习没全面了解过数据库相关函数,而在工作中都是有需求才去查有没有相应的函数,导致认识的数据库函数少之又少。好了,废话少说,接下来介绍下case when的功能以及语法。
case when相当于java中的switch case
switch(params){
case "A":
System.out.println("A!");
break;
case "B":
System.out.println("B!");
break;
default:
System.out.println("C!");
break;
}
当参数params
的值为A
时打印输出A!
,为B
时打印输出B!
,都不是时输出C!
,当然,在java中用if else
也可以实现以上的需求。那么在sql 中,case when
语法其实是有两种写法的包括简单case函数
和case搜索函数
。
简单case函数
select
case username
when 'ouxio' then '12345'
when 'hahaa' then '22344'
else 'emmm'
end
as password
from users;
当字段username
的值为ouxio
时,输出的是12345
,当值为hahaa
时,输出22344
,其他情况下都输出emmm
。
case搜索函数
select
case
when username = 'ouxio' then '12345'
when email = 'hahaa@qq.com' then '22344'
else 'emmm'
end
as password
from users;
当字段username
的值为ouxio
时,输出的是12345
,当字段email
的值为hahaa@qq.com
时,输出22344
,其他情况下都输出emmm
。
第二种case搜索函数这样写的好处包括
- 判断条件可以写表达式,比如
=
、>
、<
等 - 字段可多个,比如在上面第一个
when
判断字段是username
,而第二个when
判断的字段是email
。