Oracle中split功能的实现
原始需求:
有这样的表:tb和pk两列
PK是将表的多个主键用“|”进行分隔,我想把它变成多行
如
fundamentals_asia1_af_out |
ID_BB_GLOBAL|BC_DT|BC_EQY_DVD_ADJUST_FACT|BC_EQY_DVD_ADJ_FUND_OPER|BC_EQY_DVD_ADJ_FUND_FLAG |
变成:
fundamentals_asia1_af_out |
ID_BB_GLOBAL |
fundamentals_asia1_af_out |
BC_DT |
fundamentals_asia1_af_out |
BC_EQY_DVD_ADJUST_FACT |
fundamentals_asia1_af_out |
BC_EQY_DVD_ADJ_FUND_OPER |
fundamentals_asia1_af_out |
BC_EQY_DVD_ADJ_FUND_FLAG |
方案一
with t_n as( select rownum as N from dual connect by rownum<=200 ) ,cte as (select 'equity_asia1_dif' tb,'ID_BB_GLOBAL|RC' pk from dual union all select 'fundamentals_asia1_af_out','ID_BB_GLOBAL|BC_DT|BC_EQY_DVD_ADJUST_FACT|BC_EQY_DVD_ADJ_FUND_OPER|BC_EQY_DVD_ADJ_FUND_FLAG' from dual union allselect 'fundamentals_asia1_bs_out','ID_BB_GLOBAL|FISCAL_YEAR_PERIOD|FILING_STATUS|EQY_CONSOLIDATED|ACCOUNTING_STANDARD' from dual ),res as (select a.*,b.*,nvl(lag(b.n) over(partition by a.tb order by b.n),0) as headfrom cte a inner join t_n b on length(a.pk||'|')>=b.nwhere substr(a.pk||'|',b.n,1)='|' ) select tb,substr(pk,head+1,n-head-1),pk from res order by tb,n;
用到的知识点:
- l 公用表表达式:with xxx as ()
- l Connect by : 我这里用它来简单的构建了一个1-50的序号。可以百度它的高级用法
- l Lag() over():开窗函数
- l 利用序号表进行拆分(实际是个技巧,它还有很多的妙用)
方案二(正则)
with a as ( select 'equity_asia1_dif' tb,'ID_BB_GLOBAL|RC' pk from dual union all select 'fundamentals_asia1_af_out','ID_BB_GLOBAL|BC_DT|BC_EQY_DVD_ADJUST_FACT|BC_EQY_DVD_ADJ_FUND_OPER|BC_EQY_DVD_ADJ_FUND_FLAG' from dual union allselect 'fundamentals_asia1_bs_out','ID_BB_GLOBAL|FISCAL_YEAR_PERIOD|FILING_STATUS|EQY_CONSOLIDATED|ACCOUNTING_STANDARD' from dual ) select t1.tb,regexp_substr(pk,'[^|]+',1,t2.lv) pk from a t1, (select level lv from (select max(regexp_count(pk,'[^|]+',1))+1 ct from a) b connect by level<b.ct) t2 where regexp_substr(pk,'[^|]+',1,t2.lv) is not null order by 1,t2.lv
转载于:https://www.cnblogs.com/champaign/p/10914479.html
Oracle中split功能的实现相关推荐
- oracle中split的使用方法,Oracle 自定义split 函数实例详解
Oracle 自定义split 函数 Oracle没有提供split函数,但可以自己建立一个函数实现此功能.比如"abc defg hijkl nmopqr stuvw xy ...
- oracle 中 split函数,Oracle Split功能函数
在pl/sql时经常会碰到将某些特定的符号转换成行,这功能相当于split.以前在网上收集的split函数如下: CREATE OR REPLACE TYPE DJ_STR_SPLIT IS TABL ...
- oracle中用split,oracle中split的使用
1.创建自己的类型 VARCHAR2ARRAY CREATE OR REPLACE TYPE "VARCHAR2ARRAY" as table of varchar2(300); ...
- oracle中的split用法,oracle中split的使用
1.创建自己的类型 VARCHAR2ARRAY CREATE OR REPLACE TYPE "VARCHAR2ARRAY" as table of varchar2(300); ...
- oracle中dbms_DBMS中的功能依赖性和属性关闭
oracle中dbms 功能依赖 (Functional Dependency) A relational Database management System (RDBMS) represents ...
- mysql sys_connect_by_path_mysql中实现相仿oracle的SYS_CONNECT_BY_PATH功能
mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能 oracle中的SYS_CONNECT_BY_PATH函数为开发带来了便利,mysql中如何实现类的功能呢? DELIMI ...
- 在Oracle中实现自增加ID的功能
我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,在SQL SERVER 中有系统自带的ID自增功能,但是在ORACLE中没有这样的功能,我们可以通过采取以下方法实现自动增加ID的功 ...
- Oracle数据库asm原理,Oracle数据库中ASM功能解剖
ASM的全称是Automated Storage Management,通俗的讲 就是自动存储管理,ASM是自Oracle10g版本Oracle推出的***功能之一.这是Oracle数据库提供的一个卷 ...
- 在SQL SERVER中实现Split功能的函数,并在存储过程中使用
CREATE FUNCTION dbo.SplitString (@Expression NVARCHAR(4000), --要拆分的字符串 @Delimiter NVARCHAR( ...
最新文章
- 单件模式Singleton Pattern
- Xcode中添加代码块的方式
- ELK技术栈—Logstash—基础介绍
- html语言怎么那么难用,css语言难学吗?
- 分布式任务调度平台一站式讲解
- ido - 0.2 发布
- dedecms自定义表单提交成功后提示信息修改和跳转链接修改
- 注册.ocx控件时,提示“模块已加载,但对dllregisterserver的调用失败,错误代码为0x80040200 ”
- 五、肺癌检测-数据集训练 training.py model.py
- 计算噪声方差的函数 matlab,噪声强度(噪声功率) 噪声方差到底有什么关系? matlab中的awgn函数...
- 提升执行力,小米手环打造TODO神器
- 老四苏-33:舰载机王 苏-33的另一个编号叫苏-27K。自然,它也是从苏-27改过来的,首飞于1987年8月17日。
- Unity发布WebGL运行Js代码报错:‘Pointer_stringify‘ is obsoleted and will be removed in a future Unity version.
- 实用的19条android平台设计规范
- 朴素贝叶斯、贝叶斯网络分类器
- 双线性 双三次 和基于lanczos 的插值算法
- 辨别亦真亦假的Svchost.exe
- Unity5.0 RPG角色扮演历险类游戏之 森林历险记
- 王者荣耀小游戏4.0
- python3--数据可视化-爬取赌博聊天室2万5千条聊天记录分析之后发现...
热门文章
- json:JSONObject包的具体使用(JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包)...
- P6 EPPM 16.1 安装和配置指南 1
- Starling粒子系统工具
- java 导出excel学习小片段
- c++学习笔记(15) 异常处理
- 问题 B: 算术基本运算 山东科技大学 oj c语言
- udp文件服务器,UDP客户端服务器文件传输
- Linux下的磁盘分区与加密
- python pdb调试多进程_Python使用pdb进行调试
- 以太坊应用网络项目LUKSO通过可逆ICO筹集1800万美元