本文是对 mysql 中字符串的拼接函数
concat的一个简单总结, 包括concat,concat_ws,group_concat.concat系列的函数, 基本功能都是对参数进行拼接, 不局限于字符串.
学会了本文, 可以使用 leetcode 上的题目进行练习:
测试表
若感兴趣, 可以使用下表进行测试🌵.
1 | -- 建立测试表 orders |
表内容如下:
CONCAT()
语法:
CONCAT(str1,str2,...)功能:
- 返回由连接参数产生的字符串. 可以有多个参数, 参数可以是字段名/字符串/数字等.
- ⚠只要参数中存在
NULL, 那么就会返回NULL.
demo
1
2SELECT CONCAT(order_id, ': ', customer_name, '-', customer_gender) AS `customer_info`
FROM orders;查询结果如下:

CONCAT_WS()
语法:
CONCAT_WS(separator,str1,str2,...)功能:
- 该函数的意思是: Concatenate With Separator, 是 CONCAT() 的一种特殊形式.
separator: 是连接其余参数之间的分隔符. 分隔符可以是字符串,也可以是其他参数。如果分隔符为NULL, 则结果为NULL.
与 CONCAT() 的区别:
- 如果其他参数中存在
NULL, 那么则会忽略该参数的NULL, 而会将其余参数连接. - 连接符唯一, 不能像 CONCAT() 中随意拼接.
- 如果其他参数中存在
demo
1
2SELECT CONCAT_WS('-' , order_id, customer_name, customer_gender) AS `customer_info`
FROM orders;查询结果如下:

GROUP_CONCAT()
语法:
GROUP_CONCAT(expr)1
2
3
4
5-- 具体为
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])表达式
expr分为三段:- 拼接哪个字段(是否去重)
- 按何序拼接(默认升序
ASC) - 拼接分隔符(默认逗号
',')
功能:
- 返回一个字符串结果, 其中包含来自分组的串联非
NULL值. - 默认拼接最大长度为
1024, 可修改
- 返回一个字符串结果, 其中包含来自分组的串联非
demo
1
2
3
4SELECT sell_time, GROUP_CONCAT(DISTINCT customer_name ORDER BY order_id DESC) AS `customers`
FROM orders
GROUP BY sell_time
ORDER BY sell_time;查询结果如下:

个人收获
写下这篇博客主要是学习到了 group_concat 的用法, 可以在聚合后, 对组内的字段进行拼接, SQL函数知识📈.