MySQL、DM 行转列及字段去重(Group_Concat())
最近在使用数据库迁移适配,由MySQL 库迁移到达梦数据库,其中进行行转列时,MySQL转换达梦sql语法有些问题,特记录。
在MySQL 下有Group_Concat(expr) ,在达梦及神通数据库下如何转换,有没有同样或者类似功能的函数呢?请看下面记录。
MySQL中 Group_Concat(expr) 函数支持 内部自定义连接分割符,使用时只需要 添加 SEPARATOR ';' 即可(表示使用 分号符 连接)。 默认 逗号 连接
达梦数据库(DM) 或着神通数据库(oscar) 使用 WM_Concat(expr) ,默认 逗号(英文逗号) 连接,如果使用自定义连接符,需要使用 replace(str,exp1,exp2) 函数,示例:replace(name,',',';') 使用 分号符 替换原来的 逗号符。
MySQL 中行转列常用 函数:Group_Concat(expr):
示例-表A :select name ,age,sex ,favorite from student ---操作合并示例 favorite 字段 【favorite 字段值:1、篮球,2、足球,3、篮球,4、游泳】
MYSQL: select Group_Concat(favorite) from student where name='zhangsan'; ----最终结果 favorite 中字段以【,】 连接 结果示例:篮球,足球,篮球,游泳
去重:select Group_Concat(DISTINCT facorite) from student where name='zhangsan'; ----最终结果 favorite 中字段以【,】 连接 结果示例:篮球,足球,游泳
去重后以【;】连接:select Group_Concat(DISTINCT facorite SEPARATOR ';') from student where name='zhangsan'; ----最终结果 favorite 中字段以【;】 连接 结果示例:篮球;足球;游泳
DM 中行转列/与MYSQL中同样作用 函数:WM_Concat(expr):
示例(以MySQL中sql表示例):select name ,age,sex ,favorite from student ---操作合并示例 favorite 字段 【favorite 字段值:1、篮球,2、足球,3、篮球,4、游泳】
DM: select WM_Concat(favorite) from student where name='zhangsan'; ----最终结果 favorite 中字段以【,】 连接 结果示例:篮球,足球,篮球,游泳
去重:select WM_Concat(DISTINCT facorite) from student where name='zhangsan'; ----最终结果 favorite 中字段以【,】 连接 结果示例:篮球,足球,游泳
去重后以【;】连接:select replace(WM_Concat(DISTINCT facorite),‘,’,‘,’ )from student where name='zhangsan'; ----最终结果 favorite 中字段以【;】 连接 结果示例:篮球;足球;游泳
注:神通数据库中行转列/与MySQL 中合并字符串函数一致的 也可以使用 WM_Concat(expr): 目前还没有使用神通数据库,不过也快了,使用了再更新。
以上为本次记录,后期继续更新。转载请注明出处,感谢!如有不合理之处,请大家多多指教。
如果您觉得本文对您有帮助,欢迎点击“收藏”按钮!(/:微笑)欢迎转载,转载请注明出处。