如何在字符串中查找匹配模式的每种情况并作为行返回

时间:2019-04-28 09:08:08

标签: sql oracle

我正在尝试识别列中的字符串中包含的参考数字。该表如下所示:

col1  col2
1     fgREF1234fhjdREF1235hgkjREF1236
2     hREF1237hjdfREF1238djhfhs

需要编写一个SQL查询,该查询标识后跟4位数字的“ REF”,并在各自的行中返回每个数字。

输出应如下所示:

col1  ref
1     REF1234
1     REF1235
1     REF1236
2     REF1237
2     REF1238

我尝试过:

select
    case when substr(substr(col2, instr(col2, 'REF'), 7), 1, 1) like 'R'
    then substr(col2, instr(col2, 'R'), 7) else null end ref
from table

...但是这只会标识字符串中的第一个匹配项。

我正在使用Oracle SQL,但理想情况下,该解决方案将能够转换为其他SQL变体。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您可以使用以Rectangle分隔的regexp_substr模式字符串connect by level <= regexp_count(col2,'REF')在字符串REF 中的出现时间)

col2

Demo

答案 1 :(得分:0)

您可以使用下面的代码获得所需的结果:-

  select x.col1, explode(x.ref) as ref from (
  select col1,split(trim(regexp_replace(col2,'[^REF0-9]',' ')),'    ') as ref
  from inp