先吐槽一下oracle的wm_sys.wm_concat这个函数,为什么只能支持逗号分隔符呢?太老土了。
postgresql的string_agg就做得比较只能,可以使用任意字符串作为分隔符。
oracle行转列函数wmsys.wm_concat的使用实例demo
select * from itlife365_course a where name= '张三';
name 课程 score
张三 数学 99
张三 语文 89
张三 英语 93
上面的场景可用wmsys.wm_concat(a.name)把二行中的[课程]字段的值用","连接起来
如:
注意:因为用wmsys.wm_concat转出的类型是clob的,所以我这用了to_char转了一下。
使用wmsys.wm_concat多列合成一列遇到问题
ora-22813: 操作数值超出系统的限制
官方文档解释是总长度超过30k
请使用其他方法替代。
postgresql不存在问题,最长可以达到1gb。
如果用户不想改代码,可以尝试自行创建一个名为wm_concat的聚合函数,例子如下:
测试:
聚合函数的原理可参考:
https://yq.aliyun.com/articles/5060