Oracle 将字段拆分成多行(亲测容易实现)

 示例

-- 示例
-- STRUCDOCID QUOTEDTARGETIDS
-- 1          111,222,333

-- 查询结果
-- STRUCDOCID stype 
-- 1          111
-- 1          222
-- 1          333

 代码

-- 主键唯一ID:STRUCDOCID
-- 需分割的字段:QUOTEDTARGETIDS
-- 分隔符:,
select a.STRUCDOCID, regexp_substr(a.QUOTEDTARGETIDS,'[^,]+',1,level) as stype 
from (select STRUCDOCID,QUOTEDTARGETIDS from doc.TABLE 
where  STRUCDOCID in (680366,680367) and ISDELETED = 0)  a
connect by  a.STRUCDOCID =  a.STRUCDOCID
and level <= REGEXP_COUNT(a.QUOTEDTARGETIDS,'[^,]+')

 释义

 level 表示查询深度,可以理解为递归的层次

for (int i = 0; i < level; i++)
{
   //todo
}

REGEXP_COUNT ( source_char, pattern [, position [, match_param]])
--------------------------------------------------------

函数:返回pattern source_char 串中出现的次数。如果未找到匹配,则函数返回0。position 变量告诉Oracle 在源串的什么位置开始搜索。在开始位置之后每出现⼀次模式,都会使计数结果增加1。
match_param 变量⽀持下⾯⼏个值:

  • ‘i’ ⽤于不区分⼤⼩写的匹配
  • ‘c’ ⽤于区分⼤⼩写的匹配
  • ‘n’ 允许句点(.)作为通配符去匹配换⾏符。如果省略该参数,则句点将不匹配换⾏符
  • ‘m’ 将源串视为多⾏。即Oracle 将^和$分别看作源串中任意位置任何⾏的开始和结束,⽽不是仅仅看作整个源串的开始或结束。如果省略该参数,则Oracle将源串看作⼀⾏
  • ‘x’ 忽略空格字符。默认情况下,空格字符与⾃⾝相匹配

connect by 递归(循环) 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值