MySQL字符串拼接函数介绍

在MySQL中,实现字符串拼接主要有以下3种函数:
concat(x,y,…)
concat_ws(分隔符,x,y,…)
group_concat(distinct xxx order by asd/desc yyy separator ‘分隔符’)

一、concat函数

concat()函数用于将多个字符串连接成一个字符串

格式:concat(str1,str2,…)

– mysql concat() –
SELECT CONCAT(‘I’,‘love’,‘somebody’); # Ilovesomebody
SELECT CONCAT(‘I’,NULL,‘somebody’); # NULL
SELECT CONCAT(14.4); # 14.4

注意:

如果有任何一个参数为NULL,则返回值为NULL;
  如果所有参数为非二进制字符串,则返回非二进制字符串;
  如果含有任一二进制字符串,则返回一个二进制字符串;
  数字参数也会被转化为与之相等的二进制字符串格式,若要避免这种情况,可使用显式类型 cast,例如:
SELECT CONCAT(CAST(col_a AS CHAR), col_b) FROM table_xxx;

二、concat_ws函数

concat_ws函数,concat with separator 分隔符,是concat()的特殊形式。

格式:concat_ws(separator, str1, str2,…)

第一个参数为分隔符,放在两个要连接的字符串之间。
SELECT CONCAT_WS(’-’,‘First’,‘Second’,‘Third’); # First-Second-Third
SELECT CONCAT_WS(’-’,‘First’,NULL,‘Third’); # First-Third

注意:

如果分隔符为NULL,则结果为NULL;
  函数会忽略任何分隔符参数后的NULL值;
  函数不会忽略任何空字符串,但是会忽略所有NULL值;

三、group_concat函数

group_concat函数,实现分组查询之后的数据进行合并,并返回一个字符串结果。group_concat函数用于将多个字符串拼接成一个字符串。而MySql默认的最大拼接长度为1024个字节,一般情况下是够用的,但如果数据量特别大,就会存在java层返回内容被截断的问题,这时,为了保证拼接数据的完整性,就需要手工修改配置文件的group_concat_max_len属性值了。

格式:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )

通过使用distinct可以排除重复值;
  如果希望对结果中的值进行排序,可以使用order by子句;
  separator是一个字符串值,默认为逗号分隔。
SELECT id,
GROUP_CONCAT(DISTINCT num ORDER BY num DESC SEPARATOR ‘$’) AS cont
FROM test.t_2
GROUP BY id;

结果:
group_concat还可以与concat_ws嵌套使用,实现更加复杂功能。

四、其他字符串连接杂谈

“+” & || (不行)
Mysql使用“+”进行字符拼接的时候,会尝试将两端的字段值转换为数字类型,如果转换失败则认为字段值为0
oracle使用||进行字符串拼接,concat 只支持2个参数,可以多个嵌套使用
MS 使用+进行字符串拼接

group_concat应用

用了group_concat后,select里如果使用了limit是不起作用的
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少,可以使用group_concat_max_len系统变量,设置允许的最大长度group_concat将某一字段的值按指定的字符进行累加,系统默认的分隔符是逗号
一个简单的例子:
– 按f_b进行分组查询,将每组中的f_a进行累加
select group_concat(f_a) from t_one group by f_b;

修改默认的分隔符
– separator 是一个关键字,后面跟着要进行分隔的字符
select group_concat(f_a separator ‘_’) from t_one group by f_b;

排序
select group_concat(f_a order by f_a separator ‘_’) from t_one group by f_b;

和concat使用
group_concat默认返回的是BLOB大对象,可以使用concat,返回字符串,还可以在返回的内容,在加入其它的数据。
【参数修改】:group_concat_max_len
  group_concat_max_len是针对java的jdbc对mysql查询结果集中group_concat函数列的值的转换长度,而不是针对group_concat函数本身能够容纳的字符长度。

举例:group_concat_max_len默认值为1024,如果sql执行结果集中group_concat对应列的长度为1025,则会被截掉1个长度;但是group_concat函数本身还是会查询返回1025个长度的字符。

查看当前mysql group_concat_max_len
show variables like ‘group_concat_max_len’;

如果未曾修改会得到下面结果:
在这里插入图片描述

修改mysql group_concat_max_len
如果不方便重启mysql 可以在mysql状态通过命令设置,,可以设置作用范围,临时修改,重启服务后悔失效,如:

SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;

注:此种方式在mysql重启后会读取配置文件重新设置,会导致设置失效,所以建议依旧要修改配置文件

永久需修改配置文件:my.ini
在[mysqld]下新增配置:group_concat_max_len = 102400,重启。
特别的,有时我们并不知需要多大的字节才能满足需求,此种情况可以考虑不设置最大字节(即采用最大字节数)即在配置文件设置group_concat_max_len=-1 ( 4294967295 = 2^32 - 1)

发布了124 篇原创文章 · 获赞 29 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览