1. 程式人生 > >用MySQL 的 CONCAT() 、ISNULL()、IF() 拼接查詢結果

用MySQL 的 CONCAT() 、ISNULL()、IF() 拼接查詢結果

有時需要查詢的結果分別在幾個欄位裡面,需要將幾個欄位的內容組合起來
原來一直都是先把幾個欄位先查詢出來,然後再在 PHP 腳本里面再用一個 foreach 將這些欄位組合起來
後來想能不能直接在查詢語句中把結果組合起來,用類似於

SELECT filed1 + field2 AS result FROM t
來直接輸出結果,這樣就不用再迴圈一次,提高效率
但是讓人失望的是 MySQL 只支援數字的 + 運算,不支援字串的 + 運算
後來查到用 CONCAT() 函式可以實現字串的組合,那麼上面的查詢就可以寫成
SELECT CONCAT(filed1, filed2) AS result FROM t

遇到從幾個表的幾個欄位裡查詢內容,有時可能有的欄位為空,那麼要用其他的值來代替,這時就可以用 IFNULL() 了
用法:
IFNULL(expr1, expr2)
如果 expr1 的值不為空,返回 expr1 的值, 如果 expr1 的值為空時,返回 expr2 的值
那麼可以寫出下面的查詢了

SELECT id, IFNULL(username, 'noName') AS userName FROM t
意思是如果 username 的值為 null ,查詢出來的值就是 noName

但是 IFNULL() 不能處理值為 0 的情況,0 不是 NULL,如果用 IFNULL(0, 'zero') 那麼得到的結果還是 0,而不是 zero,這時就得用 IF() 了
用法:
IF(expr1, expr2, expr3)
如果 expr1 的值為TRUE(expr1<>0且expr1<>NULL),那麼返回 expr2 的值,否則返回 expr3 的值
那麼上面的例子可以寫成

SELECT IF(num, 'not zero', 'zero') AS Number FROM t

還有個條件分支的 CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END
這裡就不多寫了,參見參考連結