在日常开发中
有些需求我们无法避免的要在SQL语句中进行类似于Java中if判断的操作,那SQL语句是否可以满足呢?
本文将介绍SQL条件判断关键字case when的基本用法

基本语法

case x when y then z else m end

乍一看看不懂没关系,我们把它拆分开解释

case x 意思就是设置一个参数,x可以是一个数据库字段,也可以是一个dao层传递的参数,也可以是一个固定值
when y 意思就是给设定的x参数设置条件
then z 就是当x满足y条件之后做的操作,类似于Java中if条件为true的情况
 else m  当x不满足y条件时的操作,类似于Java中的if条件为falseelse代码块
end 代表本case when语句结束,每个case when语句都要带有end 否则sql语句报错

整体解释就是
设置一个x参数,当x满足y时执行z 不满足时执行m(x可忽略,原因请看下文中的举例.)

应用举例

1.用于SELECT之后,FROM之前,判断要查询的字段

假设dao传递了一个type参数,查询User表中的password字段,并且当type为1时 查询帐号,当type为2时,查询用户id

SELECT PASSWORD,
CASE #{type} WHEN 1 THEN id 
WHEN 2 THEN loginName 
ELSE money
END AS Data
FROM USER

执行结果

2.用于Where之后,用于判断要根据哪个条件查询

查询User表的全部,当表的id字段为1的时候,根据id='1’查询 当表的id字段为2的时候 根据loginName='1’查询,否则根据todayMoney='1’查询

SELECT *
FROM USER
WHERE CASE id WHEN '1' THEN id
WHEN '2' THEN loginName
ELSE todayMoney
END
='1'

执行结果

3.用于order by 之后,用来判断排序条件

假设dao层传递一个type参数,当type=1时,根据id降序排列,当type=2时,根据phone升序排列

SELECT *
FROM USER
ORDER BY 
CASE  WHEN #{type}= '1' THEN id END DESC,
CASE WHEN #{type}='2'  THEN phone END asc

这里就省略了x,换了一种写法.这种更适用于判断大于小于这些条件.
执行结果

还有其它许多使用场景 就不一一举例了.

期待您的不吝赐教

更多推荐

SQL语句条件判断之case when基本用法