MySQL字符串合并

MySQL有几种合并字符串的方式,下面来介绍一下

CONCAT函数

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

mysql> select concat('www','MySQL','substringIndex','com')
+----------------------------------------------+
| concat('www','MySQL','substringIndex','com') |
+----------------------------------------------+
| wwwMySQLsubstringIndexcom                    |
+----------------------------------------------+
1 row in set

CONCAT_WS函数

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

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

  • 合并字符串,用 “.” 隔开
mysql> select concat_ws('.','www','MySQL','substringIndex','com')
+-----------------------------------------------------+
| concat_ws('.','www','MySQL','substringIndex','com') |
+-----------------------------------------------------+
| www.MySQL.substringIndex.com                        |
+-----------------------------------------------------+
1 row in set
  • 合并的字符串带null, 直接忽略
mysql> select concat_ws('.','www','MySQL','substringIndex',NULL,'com')
+-----------------------------------------------------------------+
| select concat_ws('.','www','MySQL','substringIndex',NULL,'com') |
+-----------------------------------------------------------------+
| www.MySQL.substringIndex.com                                    |
+-----------------------------------------------------------------+
1 row in set

GROUP_CONCAT函数

GROUP_CONCAT([DISTINCT] column1 [ORDER BY column2 ASC\DESC] [SEPARATOR seq]);

  • [DISTINCT]: 将不重复的column1按照column2升序或者降序连接
  • [ORDER BY column2 ASC\DESC]: 表示将会根据column2升序或者降序连接.其中column2不一定一定要求是column1,只要保证column2在这个分组中即可.如果没有写ORDER BY句段,那么连接是没有顺序的。
  • [SEPARATOR seq]: 表示各个column1将会以什么分隔符进行分隔,例如SEPARATOR '’,则表示column1将会以进行分隔。如果没有指定seq的时候,也即没有写SEPARATOR seq这个句段,那么就会默认是以,分隔的。

CONCAT函数中要连接的数据含有NULL,最后返回的是NULL,但是GROUP_CONCAT不会这样,他会忽略NULL值。

Example
在这里插入图片描述

  • 按年龄分组,对每个人的名字按id进行分组排序合并
select age, group_concat(names order by employee_id separator '.')
from Employees
group by age
order by age

在这里插入图片描述

  • 不使用group by
select group_concat(names order by employee_id separator '.')
from Employees

在这里插入图片描述

GROUP_CONCAT只是将xxx这一列中的多行数据进行连接成为一行字符串,而CONCAT则是可以将多列数据进行连接。所以当GROUP_CONCAT和(CONCAT_WS或者CONCAT)一起使用的时候,使得查询更加有效

select age, group_concat(concat(names, '(',salary,')') order by employee_id separator ';')
from Employees
group by age
order by age

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46599926/article/details/126392259