MySQL中CONCAT()函數出現值為空的問題及解決辦法
項目中用到了三個字段,需要對它們用concat()
函數進行拼接以及分組group by
,下面一鍋端了concat()
的這個函數,有concat()
、concat_ws()
和 group_concat()
字段拼接的用法,我們來自己造點數據,做個測試。
一、concat()
1、準備一張test_concat
表
CREATE TABLE `test_concat` ( `id` int(11) NOT NULL, `name` varchar(25) default NULL, `age` int(5) default NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、插入一些數據
INSERT INTO test_concat (id, NAME, age) VALUES (1, 'andy', 18), (1, 'bob', 20), (2, 'jack', 33), (2, NULL, 22), (3, 'riemann', 28), (3, 'riemann', 28), (1, 'bob', 20)
3、執(zhí)行sql
SELECT * FROM test_concat;
SELECT CONCAT(id,name,age) FROM test_concat;
出現了null值。。。
4、解決方式
SELECT CONCAT(id,IFNULL(name,''),age) FROM test_concat;
要是name字段的值是空字符串會怎么樣呢?
繼續(xù)往下看
這時候插入的時候換成了空字符串 ' '
INSERT INTO test_concat (id, NAME, age) VALUES (1, 'andy', 18), (1, 'bob', 20), (2, 'jack', 33), (2, '', 22), (3, 'riemann', 28), (3, 'riemann', 28), (1, 'bob', 20)
沒有顯示null,而是顯示一片空白。
SELECT CONCAT(id,IFNULL(name,''),age) FROM test_concat; SELECT CONCAT(id, CASE WHEN name = '' or name is NULL THEN '' ELSE name END, age) FROM test_concat;
其實這兩種方法都可以,第二種更嚴謹一些。
二、concat_ws()
使用函數CONCAT_WS()。使用語法為:CONCAT_WS(separator,str1,str2,…)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。
第一個參數是其它參數的分隔符。分隔符的位置放在要連接的兩個字符串之間。分隔符可以是一個字符串,也可以是其它參數。如果分隔符為 NULL,則結果為 NULL。函數會忽略任何分隔符參數后的 NULL 值。但是CONCAT_WS()不會忽略任何空字符串。 (然而會忽略所有的 NULL)。
SELECT CONCAT_WS('-',id,name,age) FROM test_concat;
直接不需要判斷為不為空,這種方式不會出現null值的情況!
三、group_concat()
GROUP_CONCAT([DISTINCT] expr [,expr …]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col …]]
[SEPARATOR str_val])
在 MySQL 中,你可以得到表達式結合體的連結值。通過使用 DISTINCT 可以排除重復值。如果希望對結果中的值進行排序,可以使用 ORDER BY 子句。
SEPARATOR 是一個字符串值,它被用于插入到結果值中。缺省為一個逗號 (","),可以通過指定 SEPARATOR “” 完全地移除這個分隔符。
可以通過變量 group_concat_max_len 設置一個最大的長度。在運行時執(zhí)行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大長度被設置,結果值被剪切到這個最大長度。如果分組的字符過長,可以對系統參數進行設置:SET @@global.group_concat_max_len=40000;
使用示例:
SELECT id, GROUP_CONCAT(name) FROM test_concat WHERE id in('1', '2') GROUP BY id;
SELECT id, GROUP_CONCAT(distinct name ORDER BY name DESC SEPARATOR '_') FROM test_concat WHERE id in('1', '2') GROUP BY id;
SELECT id, GROUP_CONCAT(CONCAT_WS(', ',name,age) ORDER BY name DESC SEPARATOR '. ') FROM test_concat WHERE id in('1', '2') GROUP BY id;
到此這篇關于MySQL中CONCAT()函數出現值為空的問題及解決辦法的文章就介紹到這了,更多相關MySQL CONCAT()空值內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- MySQL基于group_concat()函數合并多行數據
- MySQL中組合字段之concat()
- Mybatis?mysql模糊查詢方式(CONCAT多個字段)及bug
- MySQL中CONCAT和GROUP_CONCAT方法的區(qū)別詳解
- mysql 模糊查詢 concat()的用法詳解
- Mysql中的concat函數(拼接函數)詳解
- MySQL group_concat函數使用方法詳解
- mysql中的concat()函數模糊查詢代替${}問題
- mysql中GROUP_CONCAT函數使用及遇到問題詳解
- mysql中GROUP_CONCAT函數使用技巧及問題詳解
- MySQL中的CONCAT()函數:輕松拼接字符串的利器
相關文章
centos7.2離線安裝mysql5.7.18.tar.gz
這篇文章主要為大家詳細介紹了centos7.2離線安裝mysql5.7.18.tar.gz,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06MySQL 啟動報錯:File ./mysql-bin.index not found (Errcode: 13)
這篇文章主要介紹了MySQL 啟動報錯:File ./mysql-bin.index not found (Errcode: 13)的解決方法,需要的朋友可以參考下2014-07-07數據庫中row_number()、rank() 和 dense_rank() 的區(qū)別
本文主要結合了SQL中的排名函數ROW_NUMBER()、RANK()和DENSE_RANK(),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-11-11升級到mysql-connector-java8.0.27的注意事項
這篇文章主要介紹了升級到mysql-connector-java8.0.27的注意事項,凡是升級總會碰到點問題,換了連接器后部署果然報錯了,下面小編給大家分享解決方法,需要的朋友可以參考下2021-12-12