使用wmsys.wm_concat 实现行合并

在 Oracle  中, 将某一个栏位的多行数据转换成使用逗号风格的一行显示。能够使用函数  wmsys.wm_concat 达成。

这个在上一篇

oracle内置函数 wmsys.wm_concat使用

中也介绍到。

參考这一段 “

Case 1: 列转换行。 以一行显示全部员工的名字

select wmsys.wm_concat(NAME) from employee;

结果: user1,user2

如今有个问题, 反过来怎样显示? 也就是说有一个栏位的值相似: user1,user2, 如今要把它拆分成两行显示。

方法就是使用函数:  regexp_substr

使用regexp_substr 实现行拆分

这个函数。 看名字一个正則表達式匹配的函数。

详细的格式例如以下:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr     :须要进行正则处理的字符串
__pattern    :进行匹配的正則表達式
__position   :起始位置。从第几个字符開始正則表達式匹配(默觉得1)
__occurrence :标识第几个匹配组,默觉得1
__modifier   :模式('i'不区分大写和小写进行检索;'c'区分大写和小写进行检索。默觉得'c'。

使用样例的话。

对于 user1, user2 , 假设要匹配第二个的话(user2)的话。 能够使用下面 SQL:

SELECT REGEXP_SUBSTR('user1,user2','[^,]+',1,2,'i') AS STR FROM DUAL; 

结果 : user2

假设要匹配全部的话。使用例如以下方式:

SELECT REGEXP_SUBSTR('user1,user2','[^,]+',1,LEVEL,'i') AS STR FROM DUAL CONNECT BY LEVEL<3; 

结果:

user1

user2

看起来达成效果了。

只是这里的LEVEL, 非常多状况下是一个变量, 是能够通过运算得出来的。

完好一下:

SELECT REGEXP_SUBSTR('user1,user2','[^,]+',1,LEVEL,'i') AS STR FROM DUAL CONNECT BY LEVEL<=LENGTH('user1,user2') - LENGTH(REGEXP_REPLACE('user1,user2', ',', ''))+1; 

这里计算个数使用的方式是:

select LENGTH('user1,user2') - LENGTH(REGEXP_REPLACE('user1,user2', ',', ''))+1 from dual;

原理就是用原字串的长度 减去 替换掉切割字符串的长度 就是有多上个切割字符串了, 再加上1 就是有多上个元素了。

最新文章

  1. C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字
  2. Android动态方式破解apk进阶篇(IDA调试so源码)
  3. Quartz集群配置
  4. Asp.Net 获取FileUpload控件的文件路径、文件名、扩展名
  5. HTML5 拖放
  6. 【Matplotlib】绘图常见设置说明
  7. 利用sql批量删除表,存储过程
  8. 不加好友实现QQ在线代码状态临时会话
  9. SQL 时间戳转DateTime类型
  10. jQuery滑动选取数值范围插件
  11. UIScreen的scale属性
  12. git操作详解
  13. Oracle数据库中in()参数超过一千报错代码报错
  14. P1440 求m区间内的最小值--洛谷luogu
  15. 新建体(1):新建type
  16. shell命令中用source 和sh(或者bash)执行脚本的区别,以及export的作用
  17. java爬取网页Unicode转UTF-8中文
  18. python:OS模块
  19. ubuntu14.04 下出现 libmysqlclient.so.20 找不到问题
  20. ajax 请求发出了,数据更改了,但是没进入success 函数 把success 换成 complete

热门文章

  1. 如何对HTMLTestRunner 进行输出print 进行修改
  2. [Swift]LeetCode1064. 不动点 | Fixed Point
  3. word文档去掉复制过来的背景颜色
  4. Spring Boot (17) 发送邮件
  5. sql的padleft
  6. Android 复制文本内容到系统剪贴板(自由复制)
  7. Emmet(Zen Coding)语法规则简介
  8. HDU_1711_初识KMP算法
  9. c# md5加密封装
  10. 查看占用某端口的进程——netstat、findstr 的使用