天天看点

PostgreSQL Oracle 兼容性之 - WM_SYS.WM_CONCAT

先吐槽一下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