本文是对 mysql 中字符串的拼接函数
concat
的一个简单总结, 包括concat
,concat_ws
,group_concat
.
concat
系列的函数, 基本功能都是对参数进行拼接, 不局限于字符串.
学会了本文, 可以使用 leetcode 上的题目进行练习:
测试表
若感兴趣, 可以使用下表进行测试🌵.
-- 建立测试表 orders
CREATE TABLE orders(
order_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '编号',
customer_name VARCHAR(255) NOT NULL COMMENT '顾客名称',
customer_gender ENUM('male', 'female') COMMENT '顾客性别',
product_name VARCHAR(255) COMMENT '商品',
sell_time DATETIME NOT NULL COMMENT '销售时间'
) DEFAULT CHARSET UTF8 COMMENT 'concat学习';
-- 插入测试数据
INSERT INTO orders (customer_name, customer_gender, product_name, sell_time)
VALUES
('张三','male','笔记本','2022-04-04'),
('王五','female','短袖','2022-04-04'),
('张三','male','键盘','2022-04-05'),
('赵六','male','笔记本','2022-04-05'),
('张三','male','鼠标','2022-04-05'),
('李四',NULL,'护眼台灯','2022-04-05'),
('李四',NULL,'牛','2022-04-05'),
('王五','female','短袖','2022-04-06'),
('张三','male','键盘','2022-04-07');
表内容如下:
CONCAT()
-
语法:
CONCAT(str1,str2,...)
-
功能:
- 返回由连接参数产生的字符串. 可以有多个参数, 参数可以是字段名/字符串/数字等.
- ⚠️只要参数中存在
NULL
, 那么就会返回NULL
.
-
demo
SELECT 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
SELECT CONCAT_WS('-' , order_id, customer_name, customer_gender) AS `customer_info` FROM orders;
查询结果如下:
GROUP_CONCAT()
-
语法:
GROUP_CONCAT(expr)
-- 具体为 GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
表达式
expr
分为三段:- 拼接哪个字段(是否去重)
- 按何序拼接(默认升序
ASC
) - 拼接分隔符(默认逗号
','
)
-
功能:
- 返回一个字符串结果, 其中包含来自分组的串联非
NULL
值. - 默认拼接最大长度为
1024
, 可修改
- 返回一个字符串结果, 其中包含来自分组的串联非
-
demo
SELECT 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函数知识📈.