[Oracle]行列转换(行合并与拆分)
使用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 就是有多上个元素了。
[Oracle]行列转换(行合并与拆分)的更多相关文章
- oracle 行列转换
oracle 行列转换列名如果是数字,用双引号包住 如下: -- 建表 create table workinfo(wid integer primary key,sid integer ,CON ...
- oracle行列转换总结-转载自ITPUB
原贴地址:http://www.itpub.net/thread-1017026-1-1.html 谢谢原贴大人 最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希 ...
- Oracle行列转换的思考与总结
最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case wh ...
- Oracle 行列转换总结
行列转换包括以下六种情况:*列转行*行转列*多列转换成字符串*多行转换成字符串*字符串转换成多列*字符串转换成多行 下面分别进行举例介绍. 首先声明一点,有些例子需要如下10g及以后才有的知识:a.掌 ...
- oracle行列转换函数的使用
oracle 10g wmsys.wm_concat行列转换函数的使用: 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行 ...
- Oracle行列转换
一.建表与插入数据 1.1.建表 create table kecheng ( id NUMBER, name ), course ), score NUMBER ); insert into kec ...
- kettle——入门操作-行列转换(行转列,字段拆分)
1.Row Normaliser,将一行多列数据转换为多行一列数据. 输入数据流: 计算器配置如下: 与计算器相连接的excel输出如下: Row Normaliser,设置如下, 与Row No ...
- oracle 行列转换函数之WM_CONCAT和LISTAGG的使用(一)
一.wm_concat函数 wm_concat能够实现同样的功能,但是有时在11g中使用需要用to_char()进行转换,否则会出现不兼容现象(WMSYS.WM_CONCAT: 依赖WMSYS 用户, ...
- Oracle 行列转换函数pivot、unpivot的使用(二)
一.行转列pivot 关键函数pivot,其用法如下 pivot(聚合函数 for 列名 in(类型)) select * from table_name pivot(max(column_name) ...
随机推荐
- Genesis 多边形闭轮廓填充算法
通过逐行扫描,计算得出直线与多边形相交点进行求解 原理图形如下所示: 相关函数: /// <summary> /// 求点P到线段L距离 /// </summary> /// ...
- js基本功能大全
1.javascript的数组API: //定义数组 var pageIds = new Array(); pageIds.push('A'); 数组长度 pageIds.length; //shif ...
- Python 43 视图 、sql注入问题 、事务 、存储过程
一:视图 1 视图是什么? 本质是一张虚拟的表,他的数据来自select语句 创建视图 create view test_view select *from t1; 2 有什么用? 原表安全 案例: ...
- ThreadLocal类详解
学习一个东西首先要知道为什么要引入它,就是我们能用它来干什么.所以我们先来看看ThreadLocal对我们到底有什么用,然后再来看看它的实现原理. ThreadLocal如果单纯从名字上来看像是“本地 ...
- “发布后tomcat中的classes目录为空”问题
办法:Project-clean,ok,问题解决.
- SmartUpload实现文件上传
(一)SmartUpload组件简介 SmartUpload组件 专门用于实现文件上传及下载的免费组件 (二)SmartUpload组件特点 使用简单:编写少量代码,完成上传下载功能 能够控制上传 ...
- QtUI设计:设置控件透明
QT设置按钮控件透明: 代码: //设置按钮 背景 前景 this->ui->ShowCvRGB->setStyleSheet(QString("color:rgba(25 ...
- Android开发之拍照功能实现
参考链接:http://www.linuxidc.com/Linux/2013-11/92892p3.htm 原文链接:http://blog.csdn.net/tangcheng_ok/articl ...
- (转)Bootstrap 之 Metronic 模板的学习之路 - (4)源码分析之脚本部分
https://segmentfault.com/a/1190000006709967 上篇我们将 body 标签主体部分进行了简单总览,下面看看最后的脚本部门. 页面结尾部分(Javascripts ...
- js截取字符串测试
function gget() { $.ajax({ type: "GET", url: "index", data: { U: '1234', P: '000 ...