我有一个包含书籍索引样式的varchar2值的列 - 意味着像1.2.3.2.1
我需要为递归选择添加特殊章节。我希望将1.2.1与1.3.1和1.2.2与1.3.2匹配,依此类推。我想知道这是否可以在没有制作pl / sql函数的情况下完成。我试过通过regexp做到这一点,但没有成功,任何想法?
select to_char(value) as f from data_parsed
start with seq like '1.1.%'
connect regexp_replace(
seq, '\.(\d+)\.', '.' || to_number('\1')+1 || '.') = prior seq
;
答案 0 :(得分:0)
如果数字始终在同一位置,您可以使用substr / instr来获取您想要的内容:
connect by
prior seq =
substr(seq, 1, instr(seq, '.', 1, 1)) -- string up to and including first period
|| (substr(seq, instr(seq, '.', 1, 1) + 1, instr(seq, '.', 1, 2) - instr(seq, '.', 1, 1) - 1) - 1) -- number between the first and second period minus 1
|| substr(seq, instr(seq, '.', 1, 2)) -- string after and including second period
我确信有一种更清晰的方法可以使用regexp完成同样的事情,但我不是正则表达式专家。