Как заменить значение в строке, кроме последнего появления определенного значения в оракуле - PullRequest
0 голосов
/ 04 июля 2018

Предположим, что у меня есть значение этого столбца:

new operational goods123 type 1 for main goods type 9

Я хочу получить значение цифры после последнего вхождения введите слово с заменой и с использованием регулярного выражения. В этом случае я хочу найти 9 . Я думаю, что регулярное выражение может выглядеть примерно так:

select REGEXP_REPLACE((SELECT REGEXP_REPLACE(' new operational goods123 type 1 for main goods type 2 ',
                                            '[^(type)[:digit:]]',
                                            ' ')
                        FROM dual),
                      '[^[:digit:]]')
  from dual;

но этот запрос возвращает 12319 .

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вы можете использовать

select REGEXP_REPLACE('new operational goods123 type 1 for main goods type 9',
                      '.*type\s*([0-9]+).*',
                      '\1',
                      1,
                      1,
                      'n'
                     ) as Result from dual

enter image description here

См. онлайн демо

Шаблон соответствует

  • .* - любые 0+ символов (как можно больше) (включая символы новой строки при использовании модификатора n)
  • type - последнее вхождение type в строке (из-за предыдущего жадного шаблона)
  • \s* - 0+ пробельных символов
  • ([0-9]+) - 1 или более цифр включены в группу 1
  • .* - остаток строки.

Замена содержит \1 заполнитель, ссылающийся на значение в группе 1.

Первая 1 - это начальная позиция для поисковой системы, а вторая 1 - это «операция замены» (мы должны заменить только один раз).

0 голосов
/ 04 июля 2018

Попробуйте это

select substr('new operational goods123 type 1 for main goods type 9', instr('new operational goods123 type 1 for main goods type 9', 'type', -1)+ 5) from dual

Примечание: я предположил, что после "type" есть пробел

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