在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, |
|
來源:
