group_concat() 函数 拼接字符串长度有限制
最近,在做一个行转列的存储过程,遇到一个问题,问题如下:
我用group_concat()函数 来整合一个月每天的操作量,并将每天的操作量用CONCAT()函数拼接成 “MAX(IF(t.a = '2017-11-01', t.s, 0))”格式,最后用group_concat()函数来拼接。
代码如下:
SELECT @sql:=
GROUP_CONCAT(
CONCAT(
'MAX(IF(t1.op_date=\'', t1.op_date, '\'',',t1.op_sum,0)) AS\'opt', day(dt), '\''
)) ,
@str:= GROUP_CONCAT(CONCAT('MAX(IF(t1.op_date=\'', t1.op_date,'\'',',t1.day_sal,0)) AS\'sal', day(dt), '\'')),
t1.staf_no,
t1.fb_code
FROM tableName AS t1
WHERE
t1.fb_code = 100088
AND t1.op_date BETWEEN "2017-08-01" AND LAST_DAY("2017-08-01")
GROUP BY
t1.fb_code,t1.staf_no
执行结果如下:

执行结果中,有四条记录超过了1kb,实际上这四条记录已经超过1kb了,只是系统自动截取了字符串而已。
具体的字符串显示:
MAX(IF(t1.op_date='2017-08-29',t1.op_sum,0)) AS'opt29',
MAX(IF(t1.op_date='2017-08-06',t1.op_sum,0)) AS'opt6',
MAX(IF(t1.op_date='2017-08-24',t1.op_sum,0)) AS'opt24',
MAX(IF(t1.op_date='2017-08-01',t1.op_sum,0)) AS'opt1',
MAX(IF(t1.op_date='2017-08-19',t1.op_sum,0)) AS'opt19',
MAX(IF(t1.op_date='2017-08-14',t1.op_sum,0)) AS'opt14',
MAX(IF(t1.op_date='2017-08-09',t1.op_sum,0)) AS'opt9',
MAX(IF(t1.op_date='2017-08-27',t1.op_sum,0)) AS'opt27',
MAX(IF(t1.op_date='2017-08-04',t1.op_sum,0)) AS'opt4',
MAX(IF(t1.op_date='2017-08-22',t1.op_sum,0)) AS'opt22',
MAX(IF(t1.op_date='2017-08-17',t1.op_sum,0)) AS'opt17',
MAX(IF(t1.op_date='2017-08-12',t1.op_sum,0)) AS'opt12',
MAX(IF(t1.op_date='2017-08-30',t1.op_sum,0)) AS'opt30',
MAX(IF(t1.op_date='2017-08-07',t1.op_sum,0)) AS'opt7',
MAX(IF(t1.op_date='2017-08-25',t1.op_sum,0)) AS'opt25',
MAX(IF(t1.op_date='2017-08-02',t1.op_sum,0)) AS'opt2',
MAX(IF(t1.op_date='2017-08-20',t1.op_sum,0)) AS'opt20',
MAX(IF(t1.op_date='2017-08-15',t1.op_sum,0)) AS'opt15',
MAX(IF(t1.op_date='2017-08-10',t1.op_sum
可以看到最后的结果中,超过ikb ,MYSQL数据库会自动进行截取。为此本人查阅了很多资料,但是无果。通过自己的尝试,总算解决了问题。
解决方法: 将将每天的操作量用CONCAT()函数合并到最简,如下:
GROUP_CONCAT(
CONCAT(
'MAX(IF(m.a=\'', day(t.op_date), '\'',',m.p,0)) \'n', day(dt), '\''
)
)
结果如下:
MAX(IF(m.a='27',m.p,0)) 'n27',MAX(IF(m.a='16',m.p,0)) 'n16',
MAX(IF(m.a='5',m.p,0)) 'n5',MAX(IF(m.a='26',m.p,0)) 'n26',
MAX(IF(m.a='15',m.p,0)) 'n15',MAX(IF(m.a='4',m.p,0)) 'n4',
MAX(IF(m.a='25',m.p,0)) 'n25',MAX(IF(m.a='14',m.p,0)) 'n14',
MAX(IF(m.a='3',m.p,0)) 'n3',MAX(IF(m.a='24',m.p,0)) 'n24',
MAX(IF(m.a='13',m.p,0)) 'n13',MAX(IF(m.a='2',m.p,0)) 'n2',
MAX(IF(m.a='23',m.p,0)) 'n23',MAX(IF(m.a='12',m.p,0)) 'n12',
MAX(IF(m.a='1',m.p,0)) 'n1',MAX(IF(m.a='22',m.p,0)) 'n22',
MAX(IF(m.a='11',m.p,0)) 'n11',MAX(IF(m.a='21',m.p,0)) 'n21',
MAX(IF(m.a='10',m.p,0)) 'n10',MAX(IF(m.a='31',m.p,0)) 'n31',
MAX(IF(m.a='20',m.p,0)) 'n20',MAX(IF(m.a='9',m.p,0)) 'n9',
MAX(IF(m.a='30',m.p,0)) 'n30',MAX(IF(m.a='19',m.p,0)) 'n19',
MAX(IF(m.a='8',m.p,0)) 'n8',MAX(IF(m.a='29',m.p,0)) 'n29',
MAX(IF(m.a='18',m.p,0)) 'n18',MAX(IF(m.a='7',m.p,0)) 'n7',
MAX(IF(m.a='28',m.p,0)) 'n28',MAX(IF(m.a='17',m.p,0)) 'n17',MAX(IF(m.a='6',m.p,0)) 'n6'

结果显而易见,压缩后,整个月的信息都被显示出来了
总结:最后,强调一下group_concat() 函数,合并字符串不能超过1kb ,否则,系统会自动截取超长的字符串,在进行别的操作就会报错了。
group_concat() 函数 拼接字符串长度有限制的更多相关文章
- Java例题_38 自定义函数求字符串长度
1 /*38 [程序 38 求字符串长度] 2 题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个字符串 7 ...
- mysql group_concat函数是有长度限制的
在表关联查询中,特别是一对多关系的表查询中,group_concat函数是很有用的一个函数,帮助我们减少对数据库查询的次数,减少服务器的压力. 但是今天使用group_concat函数查询数据库时,发 ...
- 关于group_concat函数拼接字符超长的问题
昨天测试的人火急火燎的找我,跟我说数据不对!说明情况后我去查看,原来是数据上有个子查询出来的字段没有完全展示 问题很明显,就是数据被截断了.下面贴上我写的查询 wyids_是正确的显示,通过它子查询出 ...
- SQL STUFF函数 拼接字符串 多列 合并成一列 转
关于和并列的 要这种效果. create table tb(idint, value varchar(10)) insert into tbvalues(1,'aa') insert into tbv ...
- 实现字符串检索strstr函数、字符串长度strlen函数、字符串拷贝strcpy函数
#include <stdio.h> #include <stdlib.h> #include <string.h> /* _Check_return_ _Ret_ ...
- SQL STUFF函数 拼接字符串
今日看到一篇文章,是关于和并列的,也研究了下,还是不错的 要这种效果. create table tb(idint, value varchar(10)) insert into tbvalues(1 ...
- 分组拼接字符串,GROUP_CONCAT
背景 一年过的很快,文中后来的两位员工 馮大 和 馮二 也要面对无情的 KPI 考核了,他们工作干的很不错,performance 分别是 4 和 5 新需求来了,静悄悄的来了!!! 领导想要查看每个 ...
- php 字符串长度函数
php 字符串长度函数 php 字符串长度函数,在php测试字符串长度的函数有二个,一个是strlen,另一个是mb_strlen前一个默认是支持,后一个需要开启一个插件,下面我们来介绍一下二个函数的 ...
- sizeof()和strlen()在求字符串长度时的差别
sizeof()函数输出字符串长度时会把结束符计算在内: strlen()函数输出字符串长度时不会把结束符计算在内. 如图:
随机推荐
- 在Windows server 2019 Core 版本上安装SQL2016
安装系统后,通过网络等方式先把安装ISO的文件copy过来,虚拟机则用挂一个虚拟光驱即可,然后cd进入目录,执行以下命名即可安装核心服务了: Setup.exe /qs /ACTION=Install ...
- Java SE 核心 I
Java SE 核心 I 1.Object类 在 Java 继承体系中,java.lang.Object 类位于顶端(是所有对象的直接或间接父类).如果一个类没有写 extends 关键字声明其父类, ...
- qunee 缩略图
<!DOCTYPE html> <html> <head> <title>Hello Qunee for HTML5</title> < ...
- three.js之正投影摄像机与透视投影摄像机的区别
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- three.js之创建坐标系网格
<!DOCTYPE html> <html> <head> <meta charset=utf-8> <title>My first thr ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)]
[易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现 ...
- JAVA WEB初接触——简单的MVC架构
1.概述 之前有过开发web的经验,因此我不会向无头苍蝇一般,心里还是有点数的
- Zabbix Server安装指南
监控模板网站 在https://share.zabbix.com/,提供了各种各样的监控模板,可以自行搜索,套用.
- Python3-json3csv
import json import csv json_str = '[{"a":1,"b":"2","c":" ...
- Web前端开发——HTML基本标签
标题h1-h6 只有h1到h6,没有h7. 一个页面建议只有一个h1 普通文字大小大约介于h3~h4 段落p 段内换行br 段内分组span 预留格式pre 水平线hr