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 函数进行转换。

相关推荐
Jesse_EC4 小时前
换乘次数最少的路径 SQL 查询详解与实战经验——从 WITH RECURSIVE 到 pgRouting
数据库·postgresql
工控丫丫4 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
WythePlus5 小时前
Android 14 SELinux策略深度解析
android·安全策略·selinux策略
这个DBA有点耶5 小时前
云数据库半夜卡顿,CPU才30%?深挖云盘IOPS突发限制与内核挂起机制
数据库·mysql·云原生
无言听风雨丶6 小时前
Redis 运维实战与排错
运维·数据库·redis
小天源7 小时前
智叟云集系统 · 架构与职责分层
服务器·前端·数据库
herinspace8 小时前
管家婆实用贴-SQL 2008如何修改成混合模式
服务器·数据库·sql·管家婆软件·财务软件·合肥管家婆软件
俩个逗号。。8 小时前
Kotlin flow 详解
android·开发语言·kotlin
打螺丝的小李8 小时前
制造企业质量管理系统的三类产品形态:分别解决什么问题
数据库·制造
xixingzhe28 小时前
MySQL 锁表故障排查与处理
数据库·mysql