Oracle 11g通过正则表达式获得用户定义的匹配事件

时间:2018-02-08 08:39:22

标签: oracle11g

我正在使用Oracle 11g,我想使用REGEXP_SUBSTR来匹配给定模式的所有事件。例如

 SELECT REGEXP_SUBSTR('  -> BSC Area-101202006A, BTS-101300014A, TRX-10; 
 Status = ADD IN ATOLL','([0-9]+\b?){1,}') "GSM" FROM dual

上述查询仅返回第一个匹配101202006,但我想返回搜索并匹配字符串'101202006A'和'101 30 0014A'的其他匹配项'30'并匹配9个字符的正则表达式和模式,并应返回101300014。

1 个答案:

答案 0 :(得分:0)

REGEXP_SUBSTR返回一个值。您可以使用CONNECT BY LEVEL查找所有匹配项,然后使用like根据需要过滤行。

WITH t (pat)
     AS (SELECT '  -> BSC Area-101202006A, BTS-101300014A, TRX-10; 
 Status = ADD IN ATOLL'
           FROM DUAL)
SELECT *
  FROM (    SELECT REGEXP_SUBSTR (pat,
                                  '([0-9]+\b?){1,}',
                                  1,
                                  LEVEL)
                      AS "GSM"
              FROM t
        CONNECT BY LEVEL <= REGEXP_COUNT (pat, '([0-9]+\b?){1,}'))
 WHERE GSM LIKE '%30%' AND LENGTH(GSM) = 9

REXTESTER DEMO