> 文章列表 > MYSQL Row 752 was cut by GROUP_CONCAT()

MYSQL Row 752 was cut by GROUP_CONCAT()

MYSQL Row 752 was cut by GROUP_CONCAT()

因为group_concat有个最大长度的限制,GROUP_CONCAT函数返回的结果大小被MySQL默认限制为1024(字节)的长度。超过最大长度就会被截断掉

解决方法:更改配置文件,修改长度。

https://blog.csdn.net/zzddada/article/details/115082236

concat_ws()函数

1、功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符(concat_ws就是concat with separator)

2、语法:concat_ws(separator, str1, str2, ...)

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

表结构:

代码1:

select concat (id, name, score) as info from tt2;

SQL 函数:concat函数、concat_ws()函数、group_concat()函数_小小白2333的博客-CSDN博客

REPLACE()

可进行字符串替换操作

格式: REPLACE(str,from_str,to_str)

将字符串to_str替代字符串str中的字符串from_str,返回替换后的字符串str

GROUP_CONCAT(expr)

该函数将非空列值按照分组条件进行合并并最终返回。如果有空值,则返回为空

1. 以逗号最为默认的连接字符

假设有这样一张地理表模型的树形表 t,它的基本结构如下:

SELECT GROUP_CONCAT(a.REGION_ID) FROM t a;

  group_concat函数常用于select 语句中

首先来看下初始的select函数:

select * from exam;

上述sql执行结果为:

|id    |subject |student|teacher|score|
---------------------------------------
|1       |数学    |小红    |王老师    |80   |
|2       |数学    |小李    |王老师    |80   |
|3       |数学    |小王    |王老师    |70   |
|4       |数学    |小张    |王老师    |90   |
|5       |数学    |小赵    |王老师    |70   |
|6       |数学    |小孙    |王老师    |80   |
|7       |数学    |小钱    |王老师    |90   |
|8       |数学    |小高    |王老师    |70   |
|9       |数学    |小秦    |王老师    |80   |
|10       |数学    |小马    |王老师    |90   |
|11       |数学    |小朱    |王老师    |90   |
|12       |语文    |小高    |李老师    |70   |
|15       |语文    |小秦    |李老师    |70   |
|18       |语文    |小马    |李老师    |80   |
|21       |语文    |小朱    |李老师    |90   |
|24       |语文    |小钱    |李老师    |90   |

如果我们希望按分数score进行分组,并将分组后的学生姓名打印下来,就可以用group_concat实现。执行sql:

select score,group_concat(student) from exam group by score;

执行结果为:

|score |group_concat(student)        |
-------------------------------------
|70       |小王,小赵,小高,小高,小秦        |
|80       |小红,小李,小孙,小秦,小马        |
|90       |小张,小钱,小马,小朱,小朱,小钱    |

        不难看出,在70分这一行有两条小高的记录,90分这一行有两条小钱和小朱的记录,如果我们需要去重,则需要给函数中加一个distinct参数: 

select score,group_concat(distinct student) from exam group by score;

执行结果为:

|score |group_concat(student)    |
---------------------------------
|70       |小王,小赵,小高,小秦        |
|80       |小红,小李,小孙,小秦,小马    |
|90       |小张,小钱,小马,小朱        |

         这样group_concat每行数据的结果中就没有了重复值,但是在数据中的分隔符为默认的逗号',',如果想修改默认的分隔符,只需要在上述指令中稍作修改:

select score,group_concat(distinct student separator '%') 
from exam group by score;

         执行结果:

|score |group_concat(student)    |
---------------------------------
|70       |小王%小秦%小赵%小高        |
|80       |小孙%小李%小秦%小红%小马    |
|90       |小张%小朱%小钱%小马        |
————————————————

最大值限制GROUP_CONCAT() 是有最大长度限制的,默认值是 1024。当总长度达到 1024 后,后面的记录就被截断掉。可以通过 group_concat_max_len 参数进行动态设置。

 

case end 

mysql 解释字段,case…END语句_case end_澄续缘的博客-CSDN博客

JSON_VALID() 

函数验证给定的参数是否是一个有效的 JSON 文档。如果给定的参数是有效的 JSON 文档,JSON_VALID() 函数返回 1,如果不是 JSON 文档,JSON_VALID() 函数返回 0

MySQL JSON_VALID() 函数-目之瞬间