在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; //Vevb.com
新聞熱點
疑難解答