SQL Regex Pattern, Как сопоставить только конкретную переменную между двумя символами? (см. пример вывода) - PullRequest
0 голосов
/ 06 марта 2019

У меня есть эти входы:

John/Bean/4000-M100
John/4000-M100
John/4000

Как я могу получить только 4000, но учтите, что 4000 время от времени будет меняться, это может быть 3000 или 2000, как я могу обработать это с помощью шаблона регулярных выражений?

Вот мой вывод, он соответствует John / 400-M100 и John / 4000, но двойная косая черта не соответствует требованиям к соответствию в моем регулярном выражении:

REGEXP_REPLACE(REGEXP_SUBSTR(a.demand,'/(.*)-|/(.*)',1,1),'-|/','')

Ответы [ 3 ]

1 голос
/ 06 марта 2019

Вы можете использовать этот запрос для получения желаемых результатов:

select regexp_replace(data, '^.*/(\d{4})[^/]*$', '\1')
from test

Регулярное выражение ищет набор из 4 цифр после /, а затем не следует еще один / до конца строки и заменяет все содержимое строки этими 4 цифрами.

Демонстрация на dbfiddle

0 голосов
/ 06 марта 2019

Это также сработает, если только вам не нужны цифры, за которыми следуют три нуля.Смотрите это в действии здесь, пока оно живет, http://sqlfiddle.com/#!4/23656/5

create table test_table 
( data varchar2(200))
insert into test_table values('John/Bean/4000-M100')
insert into test_table values('John/4000-M100')
insert into test_table values('John/4000')

select a.*,
       replace(REGEXP_SUBSTR(a.data,'/\d{4}'), '/', '')
from   test_table a
0 голосов
/ 06 марта 2019

Следующие значения будут соответствовать любому кратному 1000, меньшему 10000, если перед ним стоит косая черта:

\/[1-9]0{3}

Для сопоставления с любым четырехзначным числом, которому предшествует косая черта, за которым не следует другая цифра, например,4031 дюйма

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