oracle regexp_substr 随机出现的模式

oracle regexp_substr for random occurrence of a pattern

你好,我需要找到一个以任意顺序随机出现在字符串中的模式

列中的值可能像这样

'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 ',' 获取值,否则如果它出现在最后 till last。 但 n 可以出现在字符串中的任何位置。

如果你想获得 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)