mysql中能够实现相似if判断的方法

新建一张客户表,以下:sex:1-男,2-女,3-未知;level是客户的级别:1-超级VIP客户,2-VIP客户,3-普通客户mysql

方式一:case函数:流程控制函数sql

用法一:express

CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END

例子:oracle

SELECT
    t.NAME,
    (
        CASE t.sex
        WHEN 1 THEN
            ''
        WHEN 2 THEN
            ''
        ELSE
            '未知'
        END
    ) 性别
FROM
    t_customer t

结果:函数

用法二:spa

CASE
WHEN condition1 THEN returnvalue1
WHEN condition 2 THEN returnvalue2
WHEN condition 3 THEN returnvalue3
……
ELSE defaultreturnvalue
END

例子:code

SELECT
    t.NAME,
    (
        CASE 
        WHEN t.sex=1 THEN
            ''
        WHEN t.sex=2 THEN
            ''
        ELSE
            '未知'
        END
    ) 性别
FROM
    t_customer t

方式二: IF()函数blog

使用CASE函数能够实现很是复杂的逻辑判断,但是若只是实现“若是符合条件则返回A,不然返回B”这样简单的判断逻辑的话,使用CASE函数就过于繁琐。MYSQL提供了IF()函数用于简化这种逻辑判断,其语法格式以下:IF(expr1,expr2,expr3)字符串

若是 expr1 为真(expr1 <> 0 以及 expr1 <> NULL),那么 IF() 返回 expr2,不然返回expr3。IF()返回一个数字或字符串,这取决于它被使用的语境。
例子:it

select t.name,if(t.weight<80,'正常','肥胖') 体重 from t_customer t

感受这个做用和oracle 的nvl函数相似

mysql还有一个IFNULL(value1,value2)函数,这个函数通常用来替换 NULL 值的,咱们知道 NULL 值是不能参与数值运算的,好比把emp员工表的员工的提成给加100,能够这么干:

update emp set comm  = IFNULL(comm,0)+100,这样就把提成comm为null的替换成了0,从而不会出现null+100=null。

方式三:字符串的集合操做ELT()

ELT(N,str1,str2,str3,...)

 若是 N = 1,返回 str1,若是N = 2,返回 str2,等等。若是 N 小于 1 或大于参数的数量,返回 NULL。

 例子:

SELECT
    t. NAME,
    ELT(
        t. LEVEL,
        '超级VIP',
        'VIP',
        '普通'
    ) 客户类型
FROM
    t_customer t

相关文章
相关标签/搜索