oracle regexp_substr для случайного появления шаблона
Привет мне нужно найти шаблон, который случайно встречается в строке в любом порядке
Значения в столбце могут быть такими
'k=34,n=WER-RTN,l=hy33,z=device'
'k=34,l=hy33,z=device,n=WER-RTN'
'n=WER-RTN,l=hy33,z=device,k=34'
Мне нужно подобрать значение против n= till ', иначе, если оно происходит в конце до последнего. но n может встречаться в любом месте строки.
1 ответ
Решение
Если вы хотите получить WER-RTN
значение, вы можете извлечь это значение с помощью регулярного выражения, как это:
WITH t AS (SELECT 'k=34,n=WER-RTN,l=hy33,z=device' text FROM dual
UNION
SELECT 'k=34,l=hy33,z=device,n=WER-RTN' text FROM dual
UNION
SELECT 'n=WER-RTN,l=hy33,z=device,k=34' text FROM dual)
SELECT REPLACE(REPLACE(REGEXP_SUBSTR(text,'(n=.+?,)|(n=.+?$)'),'n='),',')
FROM t
Если вы используете Oracle 11g или выше, вы можете немного упростить его:
REGEXP_SUBSTR (text, '(^|,)n=([^,]+)', 1, 1, '', 2)