MySQL的IF()函数的使用
1、背景介绍
最近被一个群成员问到了MySQL的IF()函数,上网搜索了一下,发现IF()函数与CASE函数一脉相承。之前有专门的文章写过CASE函数【请参考:《SQL CASE WHEN 用法的深度解析》】,再次看到CASE函数与IF函数并列出现,倍感亲切。
2、场景分析
新建一张客户表,如下:sex:1-男,2-女,3-未知;level是客户的级别:1-超级VIP客户,2-VIP客户,3-普通客户。这种情况可以使用case函数来实现,case函数是一种流程控制的函数。
3、CASE用法
CASE用法一:
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END
例子:
SELECT
t.NAME,
(
CASE t.sex
WHEN 1 THEN
'男'
WHEN 2 THEN
'女'
ELSE
'未知'
END
) 性别
FROM
t_customer t
CASE用法二:
CASE
WHEN condition1 THEN returnvalue1
WHEN condition 2 THEN returnvalue2
WHEN condition 3 THEN returnvalue3
……
ELSE defaultreturnvalue
END
例子:
SELECT
t.NAME,
(
CASE
WHEN t.sex=1 THEN
'男'
WHEN t.sex=2 THEN
'女'
ELSE
'未知'
END
) 性别
FROM
t_customer t
4、IF()函数
使用CASE函数可以实现非常复杂的逻辑判断,可是若只是实现“如果符合条件则返回A,否则返回B”这样简单的判断逻辑的话,使用CASE函数就过于繁琐。MYSQL提供了IF()函数用于简化这种逻辑判断,其语法格式如下:
IF(expr1,expr2,expr3)
IF()函数说明:如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。在MYSQL中IF()函数的用法类似于Java中的三目表达式,其用处也比较多。
select t.name,if(t.weight<80,'正常','肥胖') 体重 from t_customer t
5、IFNULL()函数
IF()函数的特例是IFNULL()函数,其用法是这样的:
IFNULL(expr1,expr2):
IFNULL()函数说明:如果expr1是NULL,则返回expr2;如果expr1不是NULL,则返回expr1。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
SELECT IFNULL(NULL,1);
SELECT IFNULL(NULL,'hello world');
补充1:字符串的集合操作ELT()
ELT的含义为:Extract, Load, Transform。MySQL ELT()返回指定索引的参数值,函数的第一个参数是索引值,第二个参数开始以后是字符串类型的参数值。当索引的值小于1或者大于后面参数的个数时,函数返回NULL。用法如下所示:
ELT(N,str1,str2,str3,...),
ELT()函数说明:如果 N = 1,返回 str1,如果N = 2,返回 str2,等等。如果 N 小于 1 或大于参数的数量,返回 NULL。见下面的例子:
SELECT
t. NAME,
ELT(
t. LEVEL,
'超级VIP',
'VIP',
'普通'
) 客户类型
FROM
t_customer t
补充2:字符串的集合操作FIELD()
FIELD(str,str1,str2,str,str3,str4...)
FIELD()函数说明:返回str在后面的参数列(str1,str2,str,str3,str4...)中的索引,起始索引为1。如果未在参数列中发现str 则返回0。
SELECT FIELD('hello','hello','world','你好','世界');
补充3:条条大路通罗马
条条大路通罗马,但是有的路却是曲折的。ELT()、FIELD()、IFNULL()的组合也能实现CASE WHEN的效果,但是读起来十分绕口:
SELECT *,IFNULL(ELT(FIELD(type,'1','2','3','4'),'来源A','来源B','来源C','来源D'),'未知') name from order;