case函數,嚴格的意義上來講case函數已經試流程控制語句了,不是簡單意義上的函數,不過為了方便,很多人將case函數稱為流程控制函數。
case函數的一般有兩種用法:1.case expression
when value1 then returnvalue1
when value2 then returnvalue2
when value3 then returnvalue3
else defaultvalue
end
上述的第一種用法就是:case函數對表達式expression進行測試,如果expression等於value1則返回returnvalue1.依次類推如果不符合條件的所有的when條件,就返回默認值defaultvalue。
可見case函數跟普通的switch case語句非常類似,使用case函數我們可以實現復雜的業務邏輯,下面的sql語句就是就是用來判斷是好孩子,我們偏愛tom所以我們認為他是好孩子,jack是壞孩子,其他的都是普通孩子
select fname, (
case fname
when 'tom' then '好孩子'
when 'jack' then '壞孩子'
else '普通孩子'
end
) as isgoodchild
from T_person
2:case函數在做報表的時候非常有用,比如T_customer表中的flevel字段是整數類型,它記錄着客戶的級別,如果是1是VIP用戶,如果是2就是高級用戶,如果是3就是普通用戶,在制作報表的時候不應該把1,2,3這樣的數字顯示在報表中而應該顯示它的文字,這里就可以用case函數來實現
select fname,
(
case flevel
when 1 then 'VIP客戶'
when 2 then '高級客戶'
when 3 then '普通客戶'
else '客戶類型錯誤'
end
) as flevelName
from T_customer
用法二:
上面的case用法只能用來實現簡單的等於的邏輯判斷,要實現“如果年齡小於18則返回未成年人”否則返回“成年人”是無法完成的,這就是需要case的第二種用法了。
case
when condition1 then returnvalue1
when condition2 then returnvalue2
when condition3 then returnvalue3
else defaultvalue
end
解釋:condition1,condition2,condition3為條件表達式。case函數對各個表達式從前向后進行測試。如果條件1為真的時候就返回條件1對應的值returnvalue1,否則如果condition2為真的時候就返回returnvalue2........以此類推 如果都不符合條件就返回默認值defaultvalue.這種用法沒有只能對一個表達式進行判斷,因此使用起來更加靈活,比如下面的sql語句判斷一個人的體重是不是正常,如果體重大於50偏重,小於40偏輕,介於40到50之間正常。
select
fname,fweight,(
case
when fweight <40 then 'thin'
when fweight > 50 then 'fat'
else 'ok'
end
) as isnormal
from T_person.