MySQL中CONCAT()函數(shù)出現(xiàn)值為空的問題及解決辦法
項(xiàng)目中用到了三個(gè)字段,需要對它們用concat()
函數(shù)進(jìn)行拼接以及分組group by
,下面一鍋端了concat()
的這個(gè)函數(shù),有concat()
、concat_ws()
和 group_concat()
字段拼接的用法,我們來自己造點(diǎn)數(shù)據(jù),做個(gè)測試。
一、concat()
1、準(zhǔn)備一張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、插入一些數(shù)據(jù)
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;
出現(xiàn)了null值。。。
4、解決方式
SELECT CONCAT(id,IFNULL(name,''),age) FROM test_concat;
要是name字段的值是空字符串會(huì)怎么樣呢?
繼續(xù)往下看
這時(shí)候插入的時(shí)候換成了空字符串 ' '
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;
其實(shí)這兩種方法都可以,第二種更嚴(yán)謹(jǐn)一些。
二、concat_ws()
使用函數(shù)CONCAT_WS()。使用語法為:CONCAT_WS(separator,str1,str2,…)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。
第一個(gè)參數(shù)是其它參數(shù)的分隔符。分隔符的位置放在要連接的兩個(gè)字符串之間。分隔符可以是一個(gè)字符串,也可以是其它參數(shù)。如果分隔符為 NULL,則結(jié)果為 NULL。函數(shù)會(huì)忽略任何分隔符參數(shù)后的 NULL 值。但是CONCAT_WS()不會(huì)忽略任何空字符串。 (然而會(huì)忽略所有的 NULL)。
SELECT CONCAT_WS('-',id,name,age) FROM test_concat;
直接不需要判斷為不為空,這種方式不會(huì)出現(xiàn)null值的情況!
三、group_concat()
GROUP_CONCAT([DISTINCT] expr [,expr …]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col …]]
[SEPARATOR str_val])
在 MySQL 中,你可以得到表達(dá)式結(jié)合體的連結(jié)值。通過使用 DISTINCT 可以排除重復(fù)值。如果希望對結(jié)果中的值進(jìn)行排序,可以使用 ORDER BY 子句。
SEPARATOR 是一個(gè)字符串值,它被用于插入到結(jié)果值中。缺省為一個(gè)逗號(hào) (","),可以通過指定 SEPARATOR “” 完全地移除這個(gè)分隔符。
可以通過變量 group_concat_max_len 設(shè)置一個(gè)最大的長度。在運(yùn)行時(shí)執(zhí)行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大長度被設(shè)置,結(jié)果值被剪切到這個(gè)最大長度。如果分組的字符過長,可以對系統(tǒng)參數(shù)進(jìn)行設(shè)置: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;
到此這篇關(guān)于MySQL中CONCAT()函數(shù)出現(xiàn)值為空的問題及解決辦法的文章就介紹到這了,更多相關(guān)MySQL CONCAT()空值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL基于group_concat()函數(shù)合并多行數(shù)據(jù)
- MySQL中組合字段之concat()
- Mybatis?mysql模糊查詢方式(CONCAT多個(gè)字段)及bug
- MySQL中CONCAT和GROUP_CONCAT方法的區(qū)別詳解
- mysql 模糊查詢 concat()的用法詳解
- Mysql中的concat函數(shù)(拼接函數(shù))詳解
- MySQL group_concat函數(shù)使用方法詳解
- mysql中的concat()函數(shù)模糊查詢代替${}問題
- mysql中GROUP_CONCAT函數(shù)使用及遇到問題詳解
- mysql中GROUP_CONCAT函數(shù)使用技巧及問題詳解
- MySQL中的CONCAT()函數(shù):輕松拼接字符串的利器
相關(guān)文章
centos7.2離線安裝mysql5.7.18.tar.gz
這篇文章主要為大家詳細(xì)介紹了centos7.2離線安裝mysql5.7.18.tar.gz,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06mysql的MVCC多版本并發(fā)控制的實(shí)現(xiàn)
這篇文章主要介紹了mysql的MVCC多版本并發(fā)控制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04MySQL中開啟和使用通用查詢?nèi)罩镜膶?shí)例教程
這篇文章主要介紹了MySQL中開啟和使用通用查詢?nèi)罩镜膶?shí)例教程,包括其備份和關(guān)閉等基礎(chǔ)操作的例子講解,需要的朋友可以參考下2015-12-12修改MySQL的數(shù)據(jù)庫引擎為INNODB的方法
本文主要介紹了修改MySQL的數(shù)據(jù)庫引擎為INNODB的方法,希望能對您有所幫助。2015-09-09MySQL 啟動(dòng)報(bào)錯(cuò):File ./mysql-bin.index not found (Errcode: 13)
這篇文章主要介紹了MySQL 啟動(dòng)報(bào)錯(cuò):File ./mysql-bin.index not found (Errcode: 13)的解決方法,需要的朋友可以參考下2014-07-07數(shù)據(jù)庫中row_number()、rank() 和 dense_rank() 的區(qū)別
本文主要結(jié)合了SQL中的排名函數(shù)ROW_NUMBER()、RANK()和DENSE_RANK(),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11Linux下mysql 5.6.17安裝圖文教程詳細(xì)版
這篇文章主要為大家詳細(xì)介紹了Linux下mysql 5.6.17安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09升級(jí)到mysql-connector-java8.0.27的注意事項(xiàng)
這篇文章主要介紹了升級(jí)到mysql-connector-java8.0.27的注意事項(xiàng),凡是升級(jí)總會(huì)碰到點(diǎn)問題,換了連接器后部署果然報(bào)錯(cuò)了,下面小編給大家分享解決方法,需要的朋友可以參考下2021-12-12