CASEvalueWHENcompare_valueTHENresult[WHENcompare_valueTHENresult...] [ELSEresult] ENDCASE WHENconditionTHENresult[WHENconditionTHENresult...] [ELSEresult] END第一個
CASE語法會傳回第一個比較結果為 true 的value=compare_valueresult。第二個語法會傳回第一個條件為 true 的結果。如果沒有比較或條件為 true,則會傳回ELSE後面的結果,如果沒有ELSE部分,則會傳回NULL。注意此處描述的
CASE運算子 的語法與CASE陳述式 的 SQL 語法略有不同,後者在 第 15.6.5.1 節,「CASE 陳述式」中描述,用於儲存程式內部。CASE陳述式不能有ELSE NULL子句,並且以END CASE而非END終止。CASE運算式結果的傳回類型是所有結果值的彙總類型mysql> SELECT CASE 1 WHEN 1 THEN 'one' -> WHEN 2 THEN 'two' ELSE 'more' END; -> 'one' mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; -> 'true' mysql> SELECT CASE BINARY 'B' -> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END; -> NULL如果
expr1為TRUE(且expr1<> 0),expr1IS NOT NULLIF()會傳回expr2。否則,它會傳回expr3。注意還有一個
IF陳述式,它與此處描述的IF()函式 不同。請參閱第 15.6.5.2 節「IF 陳述式」。如果
expr2或expr3中只有一個明確為NULL,則IF()函式的結果類型為非NULL表達式的類型。IF()的預設傳回類型(當它儲存到暫存表格時可能很重要)的計算方式如下如果
expr2或expr3產生字串,則結果為字串。如果
expr2和expr3都是字串,則如果任一字串區分大小寫,則結果區分大小寫。如果
expr2或expr3產生浮點數值,則結果為浮點數值。如果
expr2或expr3產生整數,則結果為整數。
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'如果
expr1不是NULL,則IFNULL()會傳回expr1;否則,它會傳回expr2。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)STRING、REAL或INTEGER。考慮基於表達式的表格的情況,或者 MySQL 必須在暫存表格中內部儲存IFNULL()傳回的值的情況。mysql> CREATE TABLE tmp SELECT IFNULL(1,'test') AS test; mysql> DESCRIBE tmp; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | test | varbinary(4) | NO | | | | +-------+--------------+------+-----+---------+-------+在此範例中,
test欄位的類型為VARBINARY(4)(字串類型)。如果
為真,則傳回expr1=expr2NULL,否則傳回expr1。這與CASE WHEN相同。expr1=expr2THEN NULL ELSEexpr1END傳回值的類型與第一個參數相同。
mysql> SELECT NULLIF(1,1); -> NULL mysql> SELECT NULLIF(1,2); -> 1注意如果參數不相等,MySQL 會評估
expr1兩次。
對於這些函式中的每一個,如果第一個參數僅包含第二個參數使用的字元集和定序中存在的字元(且它是常數),則會使用後者的字元集和定序進行比較。系統變數值會被處理為具有相同字元和定序的欄位值。因此,一些使用這些函式和系統變數的查詢可能會被拒絕,並產生 Illegal mix of collations 的錯誤。在這種情況下,您應該將系統變數轉換為正確的字元集和定序。