新建一張客戶表,如下:sex:1-男,2-女,3-未知;level是客戶的級別:1-超級VIP客戶,2-VIP客戶,3-普通客戶

方式一: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
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
復制代碼

方式二: IF()函數

使用CASE函數可以實現非常復雜的邏輯判斷,可是若只是實現“如果符合條件則返回A,否則返回B”這樣簡單的判斷邏輯的話,使用CASE函數就過於繁瑣。MYSQL提供了IF()函數用於簡化這種邏輯判斷,其語法格式如下:IF(expr1,expr2,expr3)

如果 expr1 為真(expr1 <> 0 以及 expr1 <> NULL),那么 IF() 返回 expr2,否則返回expr3。IF()返回一個數字或字符串,這取決於它被使用的語境。
例子:

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
復制代碼