2012-11-05 135 views
17

我有兩個字段與MySQL的函數COALESCE()比較。例如,COALESCE(Field1, Field2)。問題是,Field1有時是空白的,但不是空的;因爲它不爲空COALESCE()選擇Field1,即使其爲空。在這種情況下,我需要它來選擇Field2。COALESCE()用於空白(但不爲空)字段

我知道我可以在查詢中編寫一個if-then-else(CASE)語句來檢查這個,但是有沒有一個很好的簡單函數,如COALESCE()用於空白但非空字段?如果字段1是空白,而IFNULL返回字段1,如果它不是空白或NULL和Field2否則

回答

25
SELECT IFNULL(NULLIF(Field1,''),Field2) 

NULLIF返回NULL。

+4

我可以這樣做,但是COALESCE正確嗎? 'COALESCE(NULLIF(Field1,'',Field2)')是否存在速度/處理負載差異? –

+0

這裏有關'COALESCE'和'IFNULL'的有趣回覆:http://stackoverflow.com/questions/4747877/mysql-ifnull-vs-coalesce-which-is-faster –

+0

@John correct http://stackoverflow.com/ a/27485689/1654265 –

6

可以使用CASE表達:

CASE WHEN Field1 <> '' THEN Field1 ELSE Field2 END 
+0

這就是我的意思是if-then-else;我正在尋找更清潔的單線解決方案 –

+3

現在它是一條線:) –

6

我知道我遲到了這裏,但有一個辦法做到這一點,同時仍然使用COALESCE()。如果你的值是NULL或'',這將會工作。

Select COALESCE(NULLIF(Field1,''), Field2) 
+1

查看對所選答案的評論:) –

+0

好吧,你去!沒有看到。 – Beachhouse

相關問題