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

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

  1. count 有条件 mysql_【笔记】Mysql中使用count加条件统计

    前言mysql 最近发如今处理Mysql问题时,count()函数频繁上镜,经常出如今分组统计的情景下,可是有时候并非使用group by分好组就能够直接统计了,好比说一个常见的需求,统计每一个班级男 ...

  2. Mysql中使用count加条件统计

    文章目录 前言 测试环境 准备工作 条件统计 总结 前言 最近发现在处理Mysql问题时,count()函数频繁上镜,常常出现在分组统计的情景下,但是有时候并不是使用group by分好组就可以直接统 ...

  3. 盘点mysql中的那些函数-----数学与字符串函数(8.31更新)

    盘点mysql中的那些函数 数学函数 平方根与取余 最小整数与最大整数 随机函数---rand 四舍五入函数----round 符号函数 幂运算函数 对数函数 角度和弧度函数 三角函数 字符串函数 字 ...

  4. mysql分组和where条件查询,mysql中where和having条件查询的区别

    having一般跟在group by后面,先对查询结果分组,再根据having条件,筛选满足条件的组,限制字段最好选择分组的字段,可以操纵使用聚合函数(sum().count().avg()等)的列, ...

  5. mysql 字符串类型 小数_在Mysql中,小数数据类型是指由字符串来表示的数字。(  )...

    [单选题]中药检查项下的总灰分是指( ) [单选题]中国药典规定取某样品 2.00g ,系指称取的质量应为( ) [多选题]中国药典2015版鉴别中药真伪的方法有( ) [多选题]中药及其制剂的鉴别方 ...

  6. MySQL中SQL命令语句条件查询

    一.聚合函数 聚合函数:又叫组函数,用来对表中的数据进行统计和计算,结合group by分组使用,用于统计和计算分组数据 常用聚合函数 count(col):求指定列的总行数 max(col):求指定 ...

  7. sql server 怎么实现mysql中group_concat,列转行,列用分隔符拼接字符串

    为什么80%的码农都做不了架构师?>>>    create table tb(id int, value varchar(10)) insert into tb values(1, ...

  8. MySQL中concat函数(连接字符串)

    MySQL中concat函数(连接字符串) MySQL中concat函数 使用方法: concat(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 ...

  9. mysql中首字母大写的函数,如何借助MySQL函数将字符串的首字母大写?

    实际上,MySQL中没有单个函数仅将字符串的首字母大写.我们需要使用的功能,嵌套和针对这种情况,我们可以使用UPPER()和LOWER()使用SUBSTRING()方法.为了理解它,我们使用来自'em ...

最新文章

  1. 操作系统安全加固方法
  2. linux ftp做yum源,在RedHat5下架设yum源服务器(FTP)
  3. php get_extension_funcs,get_extension_funcs()
  4. mysql防止误删除_mysql误删除处理方法
  5. 牛客网剑指offer编程实践31-40题
  6. cap理论具体含义_分布式事务的CAP理论
  7. 爆测一周,22年必看最细致代码托管工具测评
  8. C#如何反射出委托的签名,如何使用反射调用委托
  9. ElasticSearch 2 (34) - 信息聚合系列之多值排序
  10. Python 进阶 —— x = x+1 vs x += 1
  11. 自顶向下方法学习笔记
  12. EXCEL选择下拉框实现复选
  13. Tomcat修行之路-3.类加载机制的原理
  14. Cura切片3d打印设置
  15. 树莓派手动固定无线网络的IP地址
  16. 微软都有哪些开源项目?
  17. jenkins 下自动构建 生成二维码(不使用蒲公英 fir)
  18. 2006-4-23八达岭长城
  19. 记一次升级Flutter SDK失败的光辉历史
  20. Python调用海康SDK进行车牌识别(动态链接库的方法—不通过swig)

热门文章

  1. mysql数据库插入数据为空_插入数据成功,但是数据库中显示为空(菜鸟提问)...
  2. SparkRDD——行动算子
  3. 2022全国大学生数学建模A题的思路与解法
  4. 小鸟云安全组在哪里?怎么设置?
  5. Dota2 AI 简易开发教程(二)——英雄出装及其相关功能
  6. java set region_Java Region.setJurisdiction方法代碼示例
  7. SQL截取字符串(substring与patindex的使用)
  8. IDEA的好用小工具Test RESTful web Service
  9. 程序设计与算法二郭炜枚举002拨钟问题及解题思路
  10. ZOJ 3864 Quiz for EXO-L