我正在尝试识别列中的字符串中包含的参考数字。该表如下所示:
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变体。
任何帮助将不胜感激!
答案 0 :(得分:2)
您可以使用以Rectangle
分隔的regexp_substr
(模式字符串connect by level <= regexp_count(col2,'REF')
在字符串REF
中的出现时间)
col2
答案 1 :(得分:0)
您可以使用下面的代码获得所需的结果:-
select x.col1, explode(x.ref) as ref from (
select col1,split(trim(regexp_replace(col2,'[^REF0-9]',' ')),' ') as ref
from inp