concat,concat_ws,group_concat的使用方法

本文详细介绍了 MySQL 中的 CONCAT 函数及其用法。包括如何连接一个或多个字符串,以及当参数中包含 NULL 值时 CONCAT 函数的行为。此外还讨论了参数的数据类型对结果的影响。

concat函数
使用方法:
CONCAT(str1,str2,…)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

注意:
如果所有参数均为非二进制字符串,则结果为非二进制字符串。 
如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。
一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如:
SELECT CONCAT(CAST(int_col AS CHAR), char_col)

MySQL的concat函数可以连接一个或者多个字符串,如
mysql> select concat('10');
+--------------+
| concat('10') |
+--------------+
| 10 |
+--------------+
1 row in set (0.00 sec)

mysql> select concat('11','22','33');
+------------------------+
| concat('11','22','33') |
+------------------------+
| 112233 |
+------------------------+
1 row in set (0.00 sec)

MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
mysql> select concat('11','22',null);
+------------------------+
| concat('11','22',null) |
+------------------------+
| NULL |
+------------------------+
1 row in set (0.00 sec)

UPDATE m SET n= concat(',',n,',') WHERE k=0


concat with seperator

select concat("|", f1,f2 ) from table


### 如何在 SQL 中结合使用 `GROUP_CONCAT` 和 `CONCAT_WS` 在 SQL 查询中,可以利用 `GROUP_CONCAT` 来聚合多行数据为单个字符串,并通过 `CONCAT_WS` 将多个字段组合在一起。这种结合方式通常用于复杂的数据展示场景。 以下是具体的实现方法: #### 使用示例 假设有一张表 `sys_dept`,其结构如下: - `parent_id`: 部门父级 ID - `dept_id`: 部门唯一标识 - `dept_name`: 部门名称 目标是从该表中按 `parent_id` 进行分组,并将每个部门的 `dept_id` 和 `dept_name` 组合成形如 `id-name` 的字符串,最终以指定分隔符拼接成单一字符串。 查询语句可写为: ```sql SELECT parent_id, GROUP_CONCAT(CONCAT_WS('-', dept_id, dept_name) ORDER BY dept_id DESC SEPARATOR '#') AS combined_result FROM sys_dept GROUP BY parent_id; ``` #### 解析 1. **`CONCAT_WS('-' , dept_id, dept_name)`**: 此部分将每条记录中的 `dept_id` 和 `dept_name` 字段用 `-` 符号连接起来[^3]。如果某个字段值为 `NULL`,则会被忽略。 2. **`ORDER BY dept_id DESC`**: 在同一分组内的结果按照 `dept_id` 倒序排列[^2]。 3. **`SEPARATOR '#'`**: 设置 `GROUP_CONCAT` 聚合后的各子项间分隔符为 `#`[^4]。 4. **`GROUP BY parent_id`**: 对原始数据基于 `parent_id` 列进行分组操作[^1]。 #### 输出样例 假设有以下数据: | parent_id | dept_id | dept_name | |-----------|---------|-----------| | 1 | 10 | HR | | 1 | 20 | IT | | 2 | 30 | Sales | 执行上述查询后得到的结果将是: | parent_id | combined_result | |-----------|-----------------------| | 1 | 20-IT#10-HR | | 2 | 30-Sales | --- ### 注意事项 - 如果未提供 `SEPARATOR` 参数,则默认使用逗号 `,` 作为分隔符[^5]。 - 当存在大量数据时,需注意 MySQL 默认对 `GROUP_CONCAT` 返回的最大长度有限制(可通过设置 `group_concat_max_len` 修改)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值