MySQL中,对结果或条件进行字符串拼接

122 篇文章 2 订阅
117 篇文章 0 订阅

在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)

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

MySQL,有两种常用的方法可以进行字符串拼接。首先是使用`CONCAT`函数,它可以将多个字符串连接在一起。例如,`CONCAT('string1', 'string2', 'string3')`会返回一个由这三个字符串拼接而成的结果。这种方式是无缝拼接的。 其次是使用`CONCAT_WS`函数,它在拼接字符串时可以指定一个分隔符。例如,`CONCAT_WS('/', 'string1', 'string2', 'string3')`会返回一个由这三个字符串以斜杠作为分隔符拼接而成的结果。这种方式是带缝拼接的。 如果你想在MySQL存储过程进行字符串拼接,可以借助这两个函数来实现。下面是一个示例存储过程,演示了如何使用循环和查询进行字符串拼接,并将结果更新到表的某一行记录。 首先,我们定义了一些变量,包括要拼接字符串查询结果的局部变量等等。然后,我们使用`DECLARE`语句定义了一个游标`report`,并通过`SELECT`语句从表查询数据。接着,我们使用`DECLARE CONTINUE HANDLER`语句设置了循环结束条件。然后,我们打开游标,并使用`FETCH`语句将查询结果赋值给相应的变量。接下来,我们使用`WHILE`循环进行拼接操作,将查询结果逐个拼接字符串。最后,我们关闭游标,并使用`UPDATE`语句将拼接好的字符串更新到表的指定行记录。 通过这个示例,你可以根据自己的具体需求修改存储过程来完成字符串拼接的操作。希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值