case
計算條件列表並返回多個可能結果表達式之一。
case 具有兩種格式:
簡單 case 函數將某個表達式與一組簡單表達式進行比較以確定結果。
case 搜索函數計算一組布爾表達式以確定結果。
兩種格式都支持可選的 else 參數。
語法
簡單 case 函數:
case input_expression
when when_expression then result_expression
[ ...n ]
[
else else_result_expression
end
case 搜索函數:
case
when boolean_expression then result_expression
[ ...n ]
[
else else_result_expression
end
例如,下面的語句顯示中文年月
select getdate() as 日期,case month(getdate())
when 11 then '十一'
when 12 then '十二'
else substring('一二三四五六七八九十', month(getdate()),1)
end+'月' as 月份
下面看個實例
數據表為demotable,字段有id, condition1,condition2,condition3,condition4,condition5
要求是查詢demotable中,condition1,condition2,condition3,condition4,condition5五個字段中符合任意兩個或兩個以上的條件的內容。
可使用case when來實現這個條件,需要嵌套子查詢語句
sql語句代碼示例如下:
復制代碼 代碼如下:
select * from demotable
where ((select case 1 when condition1滿足條件 then 1 else 0 end from demotable )
+(select case 1 when condition2滿足條件 then 1 else 0 end from demotable)
+(select case 1 when condition3滿足條件 then 1 else 0 end from demotable)
+(select case 1 when condition4滿足條件 then 1 else 0 end from demotable)
+(select case 1 when condition5滿足條件 then 1 else 0 end from demotable))>=2
case表達式的默認返回值類型是任何返回值的相容集合類型,但具體情況視其所在語境而定。如果用在字符串語境中,則返回結果味字符串。如果用在數字語境中,則返回結果為十進制值、實值或整數值。
if(expr1,expr2,expr3)
如果 expr1 是true (expr1 <> 0 and expr1 <> null),則 if()的返回值為expr2; 否則返回值則為 expr3。if() 的返回值為數字值或字符串值,具體情況視其所在語境而定。
mysql教程> select if(1>2,2,3);
-> 3
mysql> select if(1<2,'yes ','no');
-> 'yes'
mysql> select if(strcmp('test','test1'),'no','yes');
-> 'no'
意,為了在 group by 塊中使用 case,查詢語句需要在 group by 塊中重復 select 塊中的 case 塊。