Mysql 實(shí)現(xiàn)字段拼接的三個(gè)函數(shù)
給運(yùn)營導(dǎo)出數(shù)據(jù)時(shí),難免需要對(duì)字段進(jìn)行拼接,如果 Mysql 可以完成的話,就可以少些很多代碼。
- concat()
- concat_ws()
- group_concat()
Mysql 確實(shí)有幾個(gè)函數(shù)可以對(duì)字段進(jìn)行拼接。
concat()
將多個(gè)字段使用空字符串拼接為一個(gè)字段
mysql> select concat(id, type) from mm_content limit 10; +------------------+ | concat(id, type) | +------------------+ | 100818image | | 100824image | | 100825video | | 100826video | | 100827video | | 100828video | | 100829video | | 100830video | | 100831video | | 100832video | +------------------+ 10 rows in set (0.00 sec)
不過如果有字段值為 NULL,則結(jié)果為 NULL。
mysql> select concat(id, type, tags) from mm_content limit 10; +------------------------+ | concat(id, type, tags) | +------------------------+ | NULL | | NULL | | NULL | | NULL | | NULL | | NULL | | NULL | | NULL | | NULL | | NULL | +------------------------+ 10 rows in set (0.00 sec)
concat_ws()
上面這種方式如果想要使用分隔符分割,就需要每個(gè)字段中間插一個(gè)字符串,非常麻煩。
concat_ws() 可以一次性的解決分隔符的問題,并且不會(huì)因?yàn)槟硞€(gè)值為 NUll,而全部為 NUll。
mysql> select concat_ws(' ', id, type, tags) from mm_content limit 10;
+--------------------------------+
| concat_ws(' ', id, type, tags) |
+--------------------------------+
| 100818 image |
| 100824 image |
| 100825 video |
| 100826 video |
| 100827 video |
| 100828 video |
| 100829 video |
| 100830 video |
| 100831 video |
| 100832 video |
+--------------------------------+
10 rows in set (0.00 sec)
group_concat()
最后一個(gè)厲害了,正常情況下一個(gè)語句寫成這樣一定會(huì)報(bào)錯(cuò)的。
mysql> select id from test_user group by age; ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test_user.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
但是 group_concat() 可以將分組狀態(tài)下的其他字段拼接成字符串查詢出來
mysql> select group_concat(name) from test_user group by age; +--------------------+ | group_concat(name) | +--------------------+ | wen,ning | | wxnacy,win | +--------------------+ 2 rows in set (0.00 sec)
默認(rèn)使用逗號(hào)分隔,我們也可以指定分隔符
mysql> select group_concat(name separator ' ') from test_user group by age; +----------------------------------+ | group_concat(name separator ' ') | +----------------------------------+ | wen ning | | wxnacy win | +----------------------------------+ 2 rows in set (0.00 sec)
將字符串按照某個(gè)順序排列
mysql> select group_concat(name order by id desc separator ' ') from test_user group by age; +---------------------------------------------------+ | group_concat(name order by id desc separator ' ') | +---------------------------------------------------+ | ning wen | | win wxnacy | +---------------------------------------------------+ 2 rows in set (0.00 sec)
如果想要拼接多個(gè)字段,默認(rèn)是用空字符串進(jìn)行拼接的,我們可以利用 concat_ws() 方法嵌套一層
mysql> select group_concat(concat_ws(',', id, name) separator ' ') from test_user group by age;
+------------------------------------------------------+
| group_concat(concat_ws(',', id, name) separator ' ') |
+------------------------------------------------------+
| 1,wen 2,ning |
| 3,wxnacy 4,win |
+------------------------------------------------------+
2 rows in set (0.00 sec)
以上就是Mysql 實(shí)現(xiàn)字段拼接的三個(gè)函數(shù)的詳細(xì)內(nèi)容,更多關(guān)于MySQL 字符串拼接的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決mysql登錄錯(cuò)誤:''Access denied for user ''root''@''localhost''
這篇文章主要介紹了mysql登錄錯(cuò)誤:'Access denied for user 'root'@'localhost',本文給出了操作過程及注意事項(xiàng),需要的朋友可以參考下2019-11-11
MYSQL SERVER收縮日志文件實(shí)現(xiàn)方法
這篇文章主要介紹了MYSQL SERVER收縮日志文件實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
一文搞懂MySQL XA如何實(shí)現(xiàn)分布式事務(wù)
MySQL如何實(shí)現(xiàn)多個(gè)MySQL數(shù)據(jù)庫更新的一致性呢?那就是MySQL XA,本文就來介紹一下MySQL XA如何實(shí)現(xiàn)分布式事務(wù),具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11
解決Win7 x64安裝解壓版mysql 5.7.18 winx64出現(xiàn)服務(wù)無法啟動(dòng)問題
這篇文章主要介紹了解決Win7 x64安裝解壓版mysql 5.7.18 winx64出現(xiàn)服務(wù)無法啟動(dòng)問題,需要的朋友可以參考下2017-05-05
C3P0連接池+MySQL的配置及wait_timeout問題的解決方法
這篇文章主要介紹了C3P0連接池+MySQL的配置及wait_timeout問題的解決方法,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09

