在mysql中concat函數有一個特點就是有一個值為null那麼不管第二個字符有多少內容都返回為空了,這個特性讓我們在實例應用中可能覺得不方便,但實現就是這樣我們需要使用其它辦法來解決。
天在做opencart開發的時候,需要對用戶表中用戶的電話號碼和區號連接起來,於是使用了concat方法,
代碼如下 復制代碼SELECT CONCAT(isdcode,telephone) FROM gb_customer
竟然發現很多NULL列,telephone明明是有值的,於是查詢了相關concat方法,
解釋如下
代碼如下 復制代碼
mysql CONCAT(str1,str2,…)
返回結果為連接參數產生的字符串。如有任何一個參數為NULL ,則返回值為 NULL。或許有一個或多個參數,
我表中isdcode的值可能為NULL,所以執行後值為空,於是乎使用個IFNULL判斷一下isdcode是否為空
SELECT CONCAT(IFNULL(isdcode,''),telephone) FROM gb_customer
這個時候就能夠取出來所有的值了,除了這種辦法我們可以默認指定一個值
mysql內置的ifull函數可以用在查詢時候為NULL值字段給一個默認值,例如:
代碼如下 復制代碼select ifnull(col1, 'default-value'), col2 from test;
當test表的col1字段為NULL時,數據庫返回的結果就為default-value,否則就返回本身的值。但是當col1字段的值為空字符串(”),由於空字符不是NULL,因此返回的結果還是空字符串。如果需要把空字符串或NULL值都用default-value代替,顯然ifnull是不行,不過使用case when語句能搞定,示例如下:
代碼如下 復制代碼select c1,
(case when c2 = '' or c2 is null then 'default-value' else c2 end)
from test;