MySQL 中的 CONCAT
MySQL 中的 CONCAT 函数
MySQL 中字符串函数 CONCAT 有三个:
- CONCAT(s1, s2, ...)
- CONCAT_WS(x, s1, s2, ...)
- GROUP_CONCAT( [ DISTINCT ] 字段名 [ ORDER BY 排序字段 ASC/DESC ] [ SEPARATOR '分隔符' ] )
函数说明
CONCAT(s1, s2, ...)
# 返回结果为连接参数产生的字符串。如果有任何一个参数为 NULL, 则返回值为 NULL
# 如果结果中含有任一二进制字符串,则结果为一个二进制字符串
# 一个数字参数被转化为阈值相等的二进制字符串格式,若要避免这种形况,可以使用显式类型 CAST 例: SELECT CONCAT( CAST(int_col AS CHAR) ,char_col )
CONCAT_WS(x, s1, s2, ...)
# 同 CONCAT 函数,不同的是,字符串减通过 x 分隔
GROUP_CONCAT( [ DISTINCT ] col [ ORDER BY order_col ASC/DESC ] [ SEPARATOR x ] )
# 用于( GROUP BY )分组查询中,将同一分组的指定字段通过 上面的 CONCAT 连接
# DISTINCT 可选去重 , ORDER BY 可选排序 , SEPARATOR 可选分隔符,默认为 ','
# col 为需要连接的字段名,order_col 为排序字段, x 为分隔符
函数使用示例 这里使用 LeetCode 1484.按日期分组销售产品 题目作为使用示例(不含题解):
# 表数据
Activities 表:
+------------+-------------+
| sell_date | product |
+------------+-------------+
| 2020-05-30 | Headphone |
| 2020-06-01 | Pencil |
| 2020-06-02 | Mask |
| 2020-05-30 | Basketball |
| 2020-06-01 | Bible |
| 2020-06-02 | Mask |
| 2020-05-30 | T-Shirt |
+------------+-------------+
当我们执行以下SQL语句时返回结果
CONCAT
SELECT CONCAT(sell_date, ' ' , product) date_product FROM ACtivities;
# 返回结果
# +------------+-------------+
# | date_product |
# +------------+-------------+
# | 2020-05-30 Headphone |
# | 2020-06-01 Pencil |
# | 2020-06-02 Mask |
# | 2020-05-30 Basketball |
# | 2020-06-01 Bible |
# | 2020-06-02 Mask |
# | 2020-05-30 T-Shirt |
# +------------+-------------+
CONCAT_WS
SELECT CONCAT_WS('_', sell_date, product) date_product FROM ACtivities;
# 返回结果
# +------------+-------------+
# | date_product |
# +------------+-------------+
# | 2020-05-30_Headphone |
# | 2020-06-01_Pencil |
# | 2020-06-02_Mask |
# | 2020-05-30_Basketball |
# | 2020-06-01_Bible |
# | 2020-06-02_Mask |
# | 2020-05-30_T-Shirt |
# +------------+-------------+
GROUP_CONCAT
SELECT GROUP_CONCAT( product ) products
FROM ACtivities
GROUP BY sell_date;
# 返回结果
# +------------+----------+-------+
# | products |
# +------------+----------+-------+
# | Headphone,Basketball,T-shirt |
# | Pencil,Bible |
# | Mask |
# +------------+----------+-------+