Увеличить специальную главу по индексу (стиль книжного указателя - 1.2.3.2) на sql - PullRequest
2 голосов
/ 15 октября 2010

У меня есть столбец, содержащий значение varchar2 в стиле индекса книги - что-то вроде 1.2.3.2.1

Мне нужна специальная глава для рекурсивного выбора. Я хочу сопоставить 1.2.1 с 1.3.1 и 1.2.2 с 1.3.2 и так далее. Мне интересно, если это можно сделать без использования функции pl / sql. Я пытался сделать это с помощью регулярных выражений, но безуспешно, любая идея?

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 голосов
/ 25 октября 2010

Если номер всегда в одной и той же позиции, вы можете использовать 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

Я уверен, что есть более понятный способ добиться того же с помощью регулярных выражений, но я не эксперт по регулярным выражениям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...