文档章节

Oracle数据行拆分多行

javayou
 javayou
发布于 2016/05/24 13:41
字数 419
阅读 40
收藏 0

单行拆分

如果表数据只有一行,则可以直接在原表上直接使用connect by+正则的方法,比如:

select regexp_substr('444.555.666', '[^.]+', 1, level) col

from dual

connect by level <= regexp_count('444.555.666', '\.') + 1

输出结果:

多行拆分

如果数据表存在多行数据需要拆分,也可以在原表上使用connect+正则的方法:

方法一、

with t as

(select '111.222.333' col

from dual

union all

select '444.555.666' col

from dual)

select regexp_substr(col, '[^.]+', 1, level)

from t

connect by level <= regexp_count(col, '\.\') + 1

and col = prior col

and prior dbms_random.value > 0

结果:

方法二、使用构造的最大行数值关联原表:

with t as

(select '111.222.333' col

from dual

union all

select '444.555.666' col

from dual)

select regexp_substr(col, '[^.]+', 1, lv)

from t, (select level lv from dual connect by level < 10) b

where b.lv <= regexp_count(t.col, '\.\') + 1

这种方法设置第二个数据集的时候要小于可能的最大值,然后两数据集做关联,在做大数据量拆分的时候,这个数值设置得当,拆分行数相对一致的情况下,效率比方法一直接connect by要高。

方法三、使用table函数:

with t as

(select '111.222.333' col

from dual

union all

select '444.555.666' col

from dual)

select column_value

from t,

table(cast(multiset

(select regexp_substr(col, '[^.]+', 1, level) dd

from dual

connect by level <= regexp_count(t.col, '\.\') + 1) as

sys.odcivarchar2list)) a

结果:

这个方法输出的列名是固定的,column_value依赖于sys.odcivarchar2list这个类型的输出,该方法对于大数据量的拆分效率比第二个方法好。

另外需注意,大数据量的拆分时,谨慎使用正则的方法去做,可以使用substr+instr的方式替换正则。

如果以上方法的效率仍然不理想,可考虑使用plsql块。

本文转载自:

javayou
粉丝 3
博文 52
码字总数 688
作品 0
太原
私信 提问
ORACLE SP2-0027

导入数据时发生SP2-0027错误: SP2-0027:Input is too long (> 2499 characters) - line ignored. 原因: SQL长度超过2500限制。 解决方式: 1、长度过长sql拆分成多行 2、使用sqlldr方式导入...

GoldenRoc
2014/05/09
0
0
Oracle 行转列pivot 、列转行unpivot 的Sql语句总结

转自:http://blog.csdn.net/xiaokui_wingfly/article/details/42419207 多行转字符串 这个比较简单,用||或concat函数可以实现 实际上就是拆分字符串的问题,可以使用 substr、instr、regex...

Amui
2016/06/29
373
0
hive 回顾---字段拆分为 多行+多列

一、拆分为多行 测试数据: huangbo a,1:b,2:c,3 xuzheng a,4:b,5:c,6 wangbaoqiang a,7:b,8:c,9 ---创建表的语句: create table testMap(name string,info map<string, int>) row format d......

Sheav
2018/09/30
0
0
大话Oracle集群,分布式数据库与区块链

区块链已经从社会的边缘产品,变得被越来越多的人所熟悉和接受,并逐渐成为一种新趋势和未来。在这个过程中,区块链技术也取得了日新月异的发展,智能合约、共识机制、分片以及跨链等新概念,...

Java大蜗牛
2018/07/25
0
0
Pandas: 如何将一列中的文本拆分为多行?

在数据处理过程中,经常会遇到以下类型的数据: 在同一列中,本该分别填入多行中的数据,被填在一行里了,然而在分析的时候,需要拆分成为多行。 在上图中,列名为"Country" ,index为4和5的...

lemon
2017/08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
30分钟前
3
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
11
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部