Mysql 函数concat、concat_ws和group_concat
本文介绍的是MySQL
中3个函数的使用,主要是针对字符串的连接合并处理:
- concat
- concat_ws
- group_concat
concat
concat()
函数是将多个字符串组合在一起,形成一个大的字符串;如果连接的字符串中存在一个为NULL,则输出的结果为NULL,语法格式为:
1 | concat(str1,str2,....strn) |
3个例子🌰说明具体使用,以下面这个表中的第一条记录为例:
1 | -- 1、字符之间不加连接符 |
上面的NULL
是MySQL
中NULL
,如果NULL
本身就是字符串,则结果不相同:
1 | mysql> select concat("01","赵雷","NULL","男"); |
注意两种情况的不同:
concat_ws
concat_ws()
函数相比较于concat()
多了一个指定的连接符号,语法为:
1 | concat_ws(separator, str1, str2, str3) |
- 第一个参数是连接的符号
- 后面的参数是待连接的字符
连接符要放在待连接的字符之间;分隔符也可以是一个字符串,也可以是其他的参数,需要注意的是:
- 如果分隔符是NULL,结果为NULL
- 函数后忽略任何分割符参数后的NULL值(分隔符之后的NULL值):连接的时候跳过NULL值
- concat_ws不会忽略空字符串;concat会忽略空字符串
下面通过几个例子来说明使用方法:
1 | -- 1、指定不同的连接符号:分别指定逗号和加号 |
group_concat
group:分组的意思;concat:连接。合起来就是分组连接,具体语法为:
1 | GROUP_CONCAT(DISTINCT expression ORDER BY expression SEPARATOR sep); |
DISTINCT
子句用于在连接分组之前消除组中的重复值ORDER BY
连接之前按升序或者降序排列。默认是升序SEPARATOR
指定在组中的值之间插入的文字值。如果不指定分隔符,则GROUP_CONCAT
函数使用逗号(,
)作为默认分隔符- 函数会自动忽略NULL值,如果所有的参数都是NULL,则结果返回NULL
GROUP_CONCAT
函数返回二进制或非二进制字符串,取决于参数。 默认情况下,返回字符串的最大长度为1024
。通过在SESSION
或GLOBAL
级别设置group_concat_max_len
系统变量来扩展最大长度。
1 | set session group_concat_max_len=18783847439738273; -- 防止超出范围数据被截掉 |
下面通过这张成绩表Score来讲解:
1 | -- 1、将每个学生的成绩单独列出来 |
distinct 和order by 后面的字段是相同的