mysql中的幾種判斷語句


在使用mysql過程中,經常會有根據某個字段的不同值顯示語義化的名稱的需求,例如一張用戶表,有個sex字段存放的是用戶性別,一般不會直接存男,女,未知這種字符串,而是存的0,1,2這種整型,整型的好處是查詢效率高於字符串,查詢出結果要顯示成男,女這種,通常做法是查詢出結果,在結果里if判斷再賦值成字符串。其實mysql提供了類似判斷的語法可以直接查出語義化的結果。

創建測試數據

創建一張用戶表user,有username(用戶名),sex(性別 3-未知 1-男 2-女)兩個字段。

CREATE TABLE IF NOT EXISTS `user`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `username` VARCHAR(100) NOT NULL,
   `sex` INT UNSIGNED,
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入測試數據:

insert into user (username,sex) values('lilei',1);
insert into user (username,sex) values('hanmeimei',2);
insert into user (username,sex) values('zhansan',3);

測試數據:

方法一.CASE函數

case函數語法:

CASE condition
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultvalue
END

舉例:

SELECT username,(CASE sex  WHEN 1 THEN '男'  WHEN 2 THEN  '女'  ELSE '未知' END) as sex FROM user;

查詢結果如圖:

方法二.IF()函數

CASE函數可以實現非常復雜的邏輯判斷,實現滿足條件就A,否則就B這樣簡單的判斷邏輯的話,CASE函數就顯得臃腫。MYSQL提供了IF()函數用於簡化這種邏輯判斷,其語法格式如下:IF(condition,A,B)
如果condition條件為真,就返回A,否則返回B。所以如果有多個條件,就無法使用IF函數。IF()返回一個數字或字符串。

select username,if(sex=1,'男','女') as sex from user;

查詢結果如圖:

可以看到,username為zhangsan的顯示性別為女,因為我們條件是sex=1為男,其它都會女。所以IF函數用於只有兩種情況的判斷。mysql還有一個IFNULL(value1,value2)函數,這個函數一般用來替換NULL值的,我們知道NULL值是不能參與數值運算的。

方法三.字符串操作ELT()

語法:
ELT(N,str1,str2,str3,...)
如果 N = 1,返回 str1,如果N = 2,返回 str2,等等。如果 N 小於 1 或大於參數的數量,返回 NULL。

SELECT username,ELT(sex,'男','女','未知') as sex FROM user

查詢結果如圖:

煩請各位看官覺得有用就給個推薦吧!


免責聲明!

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



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