最近,在做一个行转列的存储过程,遇到一个问题,问题如下:

我用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() 函数 拼接字符串长度有限制的更多相关文章

  1. Java例题_38 自定义函数求字符串长度

    1 /*38 [程序 38 求字符串长度] 2 题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个字符串 7 ...

  2. mysql group_concat函数是有长度限制的

    在表关联查询中,特别是一对多关系的表查询中,group_concat函数是很有用的一个函数,帮助我们减少对数据库查询的次数,减少服务器的压力. 但是今天使用group_concat函数查询数据库时,发 ...

  3. 关于group_concat函数拼接字符超长的问题

    昨天测试的人火急火燎的找我,跟我说数据不对!说明情况后我去查看,原来是数据上有个子查询出来的字段没有完全展示 问题很明显,就是数据被截断了.下面贴上我写的查询 wyids_是正确的显示,通过它子查询出 ...

  4. SQL STUFF函数 拼接字符串 多列 合并成一列 转

    关于和并列的 要这种效果. create table tb(idint, value varchar(10)) insert into tbvalues(1,'aa') insert into tbv ...

  5. 实现字符串检索strstr函数、字符串长度strlen函数、字符串拷贝strcpy函数

    #include <stdio.h> #include <stdlib.h> #include <string.h> /* _Check_return_ _Ret_ ...

  6. SQL STUFF函数 拼接字符串

    今日看到一篇文章,是关于和并列的,也研究了下,还是不错的 要这种效果. create table tb(idint, value varchar(10)) insert into tbvalues(1 ...

  7. 分组拼接字符串,GROUP_CONCAT

    背景 一年过的很快,文中后来的两位员工 馮大 和 馮二 也要面对无情的 KPI 考核了,他们工作干的很不错,performance 分别是 4 和 5 新需求来了,静悄悄的来了!!! 领导想要查看每个 ...

  8. php 字符串长度函数

    php 字符串长度函数 php 字符串长度函数,在php测试字符串长度的函数有二个,一个是strlen,另一个是mb_strlen前一个默认是支持,后一个需要开启一个插件,下面我们来介绍一下二个函数的 ...

  9. sizeof()和strlen()在求字符串长度时的差别

    sizeof()函数输出字符串长度时会把结束符计算在内: strlen()函数输出字符串长度时不会把结束符计算在内. 如图:

随机推荐

  1. IIS出现Server Error in '/' Application 错误的解决办法

    C:\Windows\Temp"文件夹加上 IIS_IUSRS的权限

  2. idea中安装git后,代码颜色代表的含义

    idea中安装git以后,代码文件出现了不同的颜色 它们分别表示的含义: 绿色,已经加入控制暂未提交 红色,未加入版本控制 蓝色,加入,已提交,有改动 白色,加入,已提交,无改动 灰色:版本控制已忽略 ...

  3. head pose estimation

    opencv:帖子中介绍了算法原理和opencv估计姿态的代码 https://www.learnopencv.com/head-pose-estimation-using-opencv-and-dl ...

  4. USRPX310 在GNU Radio上更改通道A或B

    UHD:USRP sink和USRP source默认是A通道发射接收.或设置 Mb0:Subdev Spec: A:0 更改为B通道收发:设置 Mb0:Subdev Spec: B:0

  5. [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)] 项目实战 实战3:Http服务器 我们今天来进一步开发我们的Http服务器,用多线程实现. 我 ...

  6. 移动/Web开发必备工具!DevExtreme v19.1.7火热发布

    DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动.Web开发框架,可以直接在Visual Studio集成开发环境,构建 ...

  7. Hadoop-No.6之文件在HDFS中的位置

    在设计一种HDFS模式时,首先应该决定文件的位置.标准化的位置会使得团队之间更容易查找和共享数据. 推荐HDFS目录结构实例.目录结构简化了不同组和用户的权限分配 /user/{username} 只 ...

  8. Hadoop-No.5之压缩

    Hadoop存储数据时需要着重考虑的一个因素就是压缩.这里不仅要满足节省存储空间的需求,也要提升数据处理性能.在处理大量数据时,消耗最大的是磁盘和网络的I/O,所以减少需要读取或者写入磁盘的数据量就能 ...

  9. Qt 多线程使用moveToThread

    Qt有两种多线程的方法,其中一种是继承QThread的run函数,另外一种是把一个继承于QObject的类用moveToThread函数转移到一个Thread里. Qt4.8之前都是使用继承QThre ...

  10. 【转】分布式文件系统FastDFS原理介绍

    什么是FastDFS? FastDFS是一个开源的轻量级分布式文件系统.它解决了大数据量存储和负载均衡等问题.特别适合以中小文件(建议范围:4KB < file_size <500MB)为 ...