0%

mysql | concat、concat_ws及group_concat简单使用

本文是对 mysql 中字符串的拼接函数 concat 的一个简单总结, 包括 concat, concat_ws, group_concat. concat 系列的函数, 基本功能都是对参数进行拼接, 不局限于字符串.

学会了本文, 可以使用 leetcode 上的题目进行练习:

测试表

若感兴趣, 可以使用下表进行测试🌵.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 建立测试表 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

    1
    2
    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

    1
    2
    SELECT 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 分为三段:

    1. 拼接哪个字段(是否去重)
    2. 按何序拼接(默认升序 ASC)
    3. 拼接分隔符(默认逗号 ',')
  • 功能:

    • 返回一个字符串结果, 其中包含来自分组的串联非 NULL 值.
    • 默认拼接最大长度为 1024, 可修改
  • demo

    1
    2
    3
    4
    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函数知识📈.

------ 本文结束------