mysql中的條件語句case when/if函數


主要知識點為case函數,if函數,ifnull函數,elt函數幾部分,主要用於mysql語句中的邏輯判斷

待操作的表如下:

+----+-----------+-----+-------+--------+

| id | name      | sex | level | weight |

+----+-----------+-----+-------+--------+

|  1 | xiaohong  | 1   | 1     | 50     |

|  2 | xiaoming  | 0   | 0     | 90     |

|  3 | xiaohuang | 1   | 2     | 80     |

|  4 | xiaoming  | 0   | 3     | NULL   |

+----+-----------+-----+-------+--------+

sex:0-woman,1-man,其中-unknown;level是客戶的級別:1-normal,2-vip,3-vvip

1.case函數

語法1:

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

舉栗:

  • select t.name,(case t.sex when 0 then 'woman' when 1 then 'man' else 'unknown' end) sex from test t; 
語法2:
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=0 then 'woman' when t.sex=1 then 'man' else 'unknown' end) sex from test t;

輸出為:

+-----------+-------+

| name      | sex   |

+-----------+-------+

| xiaohong  | man   |

| xiaoming  | woman |

| xiaohuang | man   |

| xiaoming  | woman |

+-----------+-------+

2.if函數

IF(expr1,expr2,expr3),如果 expr1 為真(expr1 <> 0 以及 expr1 <> NULL),那么 IF() 返回 expr2,否則返回expr3。

select name,if(weight>85,'fat','normal') from test;

+-----------+------------------------------+

| name      | if(weight>85,'fat','normal') |

+-----------+------------------------------+

| xiaohong  | normal                       |

| xiaoming  | fat                          |

| xiaohuang | normal                       |

| xiaoming  | normal                       |

+-----------+------------------------------+

當weight為NULL時,NULL>85的返回值為NULL,所以返回expr3 normal

3.IFNULL()函數

ifnull(value1,value2) 用來替換 NULL 值,若value1為NULL,則替換NULL為value2

select name,ifnull(weight,0) from test;

+-----------+------------------+

| name      | ifnull(weight,0) |

+-----------+------------------+

| xiaohong  | 50               |

| xiaoming  | 90               |

| xiaohuang | 80               |

| xiaoming  | 0                |

+-----------+------------------+

select name,ifnull(weight,0)+100 from test;

+-----------+----------------------+

| name      | ifnull(weight,0)+100 |

+-----------+----------------------+

| xiaohong  |                  150 |

| xiaoming  |                  190 |

| xiaohuang |                  180 |

| xiaoming  |                  100 |

+-----------+----------------------+

4.ELT函數

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

如果 N = 1,返回 str1,如果N = 2,返回 str2,等等。如果 N 小於 1 或大於參數的數量,返回 NULL。

select name,elt(level,'normal','vip','vvip') from test;

+-----------+----------------------------------+

| name      | elt(level,'normal','vip','vvip') |

+-----------+----------------------------------+

| xiaohong  | normal                           |

| xiaoming  | NULL                             |

| xiaohuang | vip                              |

| xiaoming  | vvip                             |

+-----------+----------------------------------+

其他:

Mysql的if既可以作為表達式用,也可在存儲過程中作為流程控制語句使用,在該文中只講述了if表達式。

參考:https://blog.csdn.net/rocling/article/details/82147981


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM