原始需求:

有这样的表: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功能的实现相关推荐

  1. oracle中split的使用方法,Oracle 自定义split 函数实例详解

    Oracle 自定义split 函数 Oracle没有提供split函数,但可以自己建立一个函数实现此功能.比如"abc defg  hijkl   nmopqr     stuvw  xy ...

  2. oracle 中 split函数,Oracle Split功能函数

    在pl/sql时经常会碰到将某些特定的符号转换成行,这功能相当于split.以前在网上收集的split函数如下: CREATE OR REPLACE TYPE DJ_STR_SPLIT IS TABL ...

  3. oracle中用split,oracle中split的使用

    1.创建自己的类型 VARCHAR2ARRAY CREATE OR REPLACE TYPE "VARCHAR2ARRAY" as table of varchar2(300); ...

  4. oracle中的split用法,oracle中split的使用

    1.创建自己的类型 VARCHAR2ARRAY CREATE OR REPLACE TYPE "VARCHAR2ARRAY" as table of varchar2(300); ...

  5. oracle中dbms_DBMS中的功能依赖性和属性关闭

    oracle中dbms 功能依赖 (Functional Dependency) A relational Database management System (RDBMS) represents ...

  6. mysql sys_connect_by_path_mysql中实现相仿oracle的SYS_CONNECT_BY_PATH功能

    mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能 oracle中的SYS_CONNECT_BY_PATH函数为开发带来了便利,mysql中如何实现类的功能呢? DELIMI ...

  7. 在Oracle中实现自增加ID的功能

    我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,在SQL SERVER 中有系统自带的ID自增功能,但是在ORACLE中没有这样的功能,我们可以通过采取以下方法实现自动增加ID的功 ...

  8. Oracle数据库asm原理,Oracle数据库中ASM功能解剖

    ASM的全称是Automated Storage Management,通俗的讲 就是自动存储管理,ASM是自Oracle10g版本Oracle推出的***功能之一.这是Oracle数据库提供的一个卷 ...

  9. 在SQL SERVER中实现Split功能的函数,并在存储过程中使用

    CREATE FUNCTION dbo.SplitString (@Expression NVARCHAR(4000), --要拆分的字符串          @Delimiter NVARCHAR( ...

最新文章

  1. 单件模式Singleton Pattern
  2. Xcode中添加代码块的方式
  3. ELK技术栈—Logstash—基础介绍
  4. html语言怎么那么难用,css语言难学吗?
  5. 分布式任务调度平台一站式讲解
  6. ido - 0.2 发布
  7. dedecms自定义表单提交成功后提示信息修改和跳转链接修改
  8. 注册.ocx控件时,提示“模块已加载,但对dllregisterserver的调用失败,错误代码为0x80040200 ”
  9. 五、肺癌检测-数据集训练 training.py model.py
  10. 计算噪声方差的函数 matlab,噪声强度(噪声功率) 噪声方差到底有什么关系? matlab中的awgn函数...
  11. 提升执行力,小米手环打造TODO神器
  12. 老四苏-33:舰载机王 苏-33的另一个编号叫苏-27K。自然,它也是从苏-27改过来的,首飞于1987年8月17日。
  13. Unity发布WebGL运行Js代码报错:‘Pointer_stringify‘ is obsoleted and will be removed in a future Unity version.
  14. 实用的19条android平台设计规范
  15. 朴素贝叶斯、贝叶斯网络分类器
  16. 双线性 双三次 和基于lanczos 的插值算法
  17. 辨别亦真亦假的Svchost.exe
  18. Unity5.0 RPG角色扮演历险类游戏之 森林历险记
  19. 王者荣耀小游戏4.0
  20. python3--数据可视化-爬取赌博聊天室2万5千条聊天记录分析之后发现...

热门文章

  1. json:JSONObject包的具体使用(JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包)...
  2. P6 EPPM 16.1 安装和配置指南 1
  3. Starling粒子系统工具
  4. java 导出excel学习小片段
  5. c++学习笔记(15) 异常处理
  6. 问题 B: 算术基本运算 山东科技大学 oj c语言
  7. udp文件服务器,UDP客户端服务器文件传输
  8. Linux下的磁盘分区与加密
  9. python pdb调试多进程_Python使用pdb进行调试
  10. 以太坊应用网络项目LUKSO通过可逆ICO筹集1800万美元