MySQL的if既可以作為表達(dá)式用,也可在存儲(chǔ)過程中作為流程控制語句使用,如下是做為表達(dá)式使用:
IF表達(dá)式
IF(expr1,expr2,expr3)
[如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),則 IF()的返回值為expr2; 否則返回值則為 expr3。IF() 的返回值為數(shù)字值或字符串值,具體情況視其所在語境而定。
select if(sva=1,"男","女") as ssva from taname where id = '111';
作為表達(dá)式的if也可以用CASE when來實(shí)現(xiàn):
select CASE sva WHEN 1 THEN '男' ELSE '女' END as ssva from taname where id = '1' ;
在第一個(gè)方案的返回結(jié)果中, value=compare-value。而第二個(gè)方案的返回結(jié)果是第一種情況的真實(shí)結(jié)果。如果沒有匹配的結(jié)果值,則返回結(jié)果為ELSE后的結(jié)果,如果沒有ELSE 部分,則返回值為 NULL。
SELECT CASE 1 WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'more' END
as testCol
作為表達(dá)式的if也可以用CASE when來實(shí)現(xiàn):
將輸出one
IFNULL(expr1,expr2)
假如expr1 不為 NULL,則 IFNULL() 的返回值為 expr1; 否則其返回值為 expr2。IFNULL()的返回值是數(shù)字或是字符串,具體情況取決于其所使用的語境。
mysql> SELECT IFNULL(1,0);
-> 1
mysql> SELECT IFNULL(NULL,10);
-> 10
mysql> SELECT IFNULL(1/0,10);
-> 10
mysql> SELECT IFNULL(1/0,'yes');
-> 'yes'
IFNULL(expr1,expr2) 的默認(rèn)結(jié)果值為兩個(gè)表達(dá)式中更加“通用”的一個(gè),順序?yàn)镾TRING、 REAL或 INTEGER。
IF ELSE 做為流程控制語句使用
if實(shí)現(xiàn)條件判斷,滿足不同條件執(zhí)行不同的操作,這個(gè)我們只要學(xué)編程的都知道if的作用了,下面我們來看看mysql 存儲(chǔ)過程中的if是如何使用的吧。
IF search_condition THEN
statement_list
[ELSEIF search_condition THEN]
statement_list ...
[ELSE
statement_list]
END IF
與PHP中的IF語句類似,當(dāng)IF中條件search_condition成立時(shí),執(zhí)行THEN后的statement_list語句,否則判斷ELSEIF中的條件,成立則執(zhí)行其后的statement_list語句,否則繼續(xù)判斷其他分支。當(dāng)所有分支的條件均不成立時(shí),執(zhí)行ELSE分支。search_condition是一個(gè)條件表達(dá)式,可以由“=、<、<=、>、>=、!=”等條件運(yùn)算符組成,并且可以使用AND、OR、NOT對多個(gè)表達(dá)式進(jìn)行組合。