2012-12-04 30 views
6

CASE和IF之間的區別,我發現很奇怪的MySQL的行爲:什麼是在MySQL

我有一個元音字母的字符串,而我一些關於它的IF運行表現。 類似於:

IF(length(field) < 10, '', replace(field, "\n", "<BR>")) 

它工作正常。

但是,如果我通過CASE取代這個,那麼結果會在第一個unlaut字母上被剪切!

CASE WHEN length(field)<10 THEN '' ELSE replace(field, "\n", "<BR>") END 

另外,我注意到它只發生在查詢中還有GROUP BY部分時。

我不明白CASE和IF之間有什麼區別 - 從邏輯的角度來看,兩者應該完全一樣地返回相同的結果。

任何人都知道爲什麼這兩個命令之間存在差異?

+0

「結果在第一個unlaut字母上」的含義是什麼?什麼是「unlaut letter」?你使用的是什麼版本的MySQL?如果你的意思是檢查字段是否有10 *個字符*(而不是10個字節),你應該使用[CHAR_LENGTH](https://dev.mysql.com/doc/refman/5.6/en/string-functions.html# function_char-length)而不是LENGTH。 – Schwern

回答

-1

似乎像一些mysql內部實現「功能」。

7

「如果是一個岔路口,‘CASE’可以是多個 使用‘案例’,如果你有兩個以上的值可選值,‘IF’當你只有兩個值。

通用的結構案例:

CASE x 
WHEN a THEN .. 
WHEN b THEN .. 
... 
ELSE 
END 

IF的一般結構:

IF (expr) 
THEN... 
ELSE... 
END 

因此,基本上IF是隻有一個'WHEN'語句的CASE。

+0

沒錯,但我問的是爲什麼IF的結果和一個陳述CASE的結果之間可能存在差異? – diemacht

+1

區別是非常基本的。如果您嘗試將某些內容評估爲TRUE/FALSE條件,則IF語句非常有用。 CASE語句在有多種可能的條件時使用。你可以用嵌套的IF語句完成同樣的事情,但是這會變得混亂。 – Codesen