MYSQL 常用合并函数

一、前言

最近项目上遇到一个情况,一个地市有多个县区分公司,一个分公司下面又有好多具体的支局,需要通过区县ID或者名字对应的多条支局拼接成一个字符串放在一个字段里,于是网上查到了group_concat方法,我们来看一下具体的执行效果。同时也详细学习了concat()、concat_ws()函数。

二、concat()

2.1 功能

将多个字符串连接成一个字符串。

2.2 语法

concat(str1, str2,...)

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

2.3 实例

sql 复制代码
SELECT
	CONCAT( t.orgname, '(', t.orgid, ') - ', t.orgcode ) dsc,
	t.* 
FROM
	entry_pianquzb_report t 
WHERE
	t.latn = 20001

三、concat_ws()

3.1 功能

和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)

3.2 语法

concat_ws(separator, str1, str2, ...)

第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。

3.3 实例

sql 复制代码
SELECT
	CONCAT_WS( ' - ', t.orgname, t.orgcode ) dsc,
	t.* 
FROM
	entry_pianquzb_report t 
WHERE
	t.latn = 20001

四、group_concat()

4.1 功能

GROUP_CONCAT 函数返回带有来自一个组的连接的非 NULL 值的字符串结果。该函数是一个增强的 Sybase SQL Anywhere 支持的基本 LIST() 函数。

4.2 语法

复制代码
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])

DISTINCT :去除重复值

expr ,expr ... :一个或多个字段(或表达式)

ORDER BY {unsigned_integer | col_name | expr} ASC \| DESC ,col_name ...:根据字段或表达式进行排序,可多个

4.3 实例

查询县局分公司的所有支局并用逗号连接
sql 复制代码
SELECT
	t.fgsorgname,
	GROUP_CONCAT( t.zjorgname ) zjname 
FROM
	entry_pianquzb_report t 
WHERE
	t.latn = 20001 
GROUP BY
	t.fgsorgname
查询县局分公司的所有支局并用分号连接
sql 复制代码
SELECT
	t.fgsorgname,
	GROUP_CONCAT( t.zjorgname SEPARATOR ';' ) zjname 
FROM
	entry_pianquzb_report t 
WHERE
	t.latn = 20001 
GROUP BY
	t.fgsorgname
查询县局分公司的所有支局,用支局id排序后再连接
sql 复制代码
SELECT
	t.fgsorgname,
	GROUP_CONCAT( t.zjorgname ORDER BY t.zjorgid ) zjname 
FROM
	entry_pianquzb_report t 
WHERE
	t.latn = 20001 
GROUP BY
	t.fgsorgname

4.4 注意事项

最大长度(字符)限制:

系统变量:group_concat_max_len

SET SESSION \| GLOBAL group_concat_max_len = val;

val 必须是无符号整数

用了GROUP_CONCAT函数,SELECT语句中的LIMIT语句起不了任何作用。

INT 类型陷阱

连接的字段为INT类型时,低版本或出现返回的结果不是逗号分隔的字符串,而是byte\[\]。此时,需要用 CAST 或 CONVERT 函数进行转换。

相关推荐
东风微鸣1 小时前
一次断电引发的血案:Ubuntu 26.04 升级中断后的完整救援实录
数据库·ubuntu·postgresql
大侠归来1 小时前
事务能回滚吗?Pipeline 算事务吗?
java·数据库·oracle
事圆则缓1 小时前
HTTP 请求是怎么走的:从 Android 页面到服务端响应
android·网络协议·http
临床数据科学和人工智能兴趣组1 小时前
字符串转换为句子风格
大数据·数据库·人工智能·r语言·r语言-4.2.1
夕除2 小时前
PostgreSQL基础
数据库·oracle
zyseo82 小时前
谷歌SEO 站点地图优化实战:sitemap 是索引候选清单的运营工具
网络·数据库·经验分享·笔记·搜索引擎
wespaul2 小时前
VeapAI 自然语言操作实战|第 04 篇:系统数据加工——把系统自身的元数据吃成知识
java·大数据·运维·数据库·人工智能
用户84913717547162 小时前
数据库迁移总出问题?学会这个工具,让团队协作效率翻倍!
数据库·sql
幼儿园蛋小黑2 小时前
SPI 子系统:从原理到实践
java·前端·数据库