因为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() 函数-目之瞬间