示例
-- 示例
-- 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’ 忽略空格字符。默认情况下,空格字符与⾃⾝相匹配