1. 程式人生 > >MYSQL-----控制流程函式(case when...then..else..end)

MYSQL-----控制流程函式(case when...then..else..end)

MySQL有一些內建的控制流程函式,可以在SQL語句中使用這些函式來更加準確和直接的結果。

第一種語法:

case

when [value] then result

..................

end 

第二種語法:

case

when [condition] then result

................

[else result]

end

   該函式依據condition的值是否是真而產生不同的結果,除了多重條件與結果可能會繫結在一起之外,該函式與if()函式十分類似,上面顯示的語法在case之後給定的value值與每個when之後的value值進行比較,如果結果匹配,結果將返回then之後給出的result值.

    第二種語法獨立地測試每個條件,它們並不是已單個值為基礎的,對於這兩種用法而言,如果找不到匹配的值,則應將else子句包括進來並返回else子句所給定的結果,如果既沒有匹配的值也沒有給定else子句,則結果返回NULL值。

  如果選擇的result是字串,則結果返回一個字串資料型別的值,如果result是數值型的,那麼返回的結果可能是十進位制,實型或者整形的值。

示例需要實現的結果:age小於等於12的用1替換,age大於70小於100的用2替換,如下是簡單的查詢結果

 

第一種語法的示例如下:

#age:12,46,70,84#
 select
uuid,mobile,case when age <= 12 then 1 when age >=70 and age <=100 then 2 end as "年齡" from user where mobile="53437569";

查詢結果:age小於等於12的用1已替換,age大於70小於100的用2已替換

 

第二種語法示例:多了一步else,當滿足給定的when條件後的其他值,將會用else給定的值來填充,將不會在出現NULL值

select uuid,mobile,case 
 when age <= 12 then
1 when age >=70 and age <=100 then 2 else 9 end as "年齡" from user where mobile="53437569";

查詢結果如下: