通过sql增加关于索引(书籍索引样式 - 1.2.3.2)的特殊章节

时间:2010-10-15 18:27:45

标签: sql oracle

我有一个包含书籍索引样式的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
;

1 个答案:

答案 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完成同样的事情,但我不是正则表达式专家。