首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >甲骨文中的REGEXP_SUBSTR

甲骨文中的REGEXP_SUBSTR
EN

Stack Overflow用户
提问于 2014-04-18 16:25:21
回答 1查看 400关注 0票数 0

我有日志表:

代码语言:javascript
复制
with t as
 (select '16/04/2014  20:17:25 XXX. Xxxxxxx xxx xxx   [SYSTEM_JOBS] xxx [POSTPONE_JOBS] xxx [SYSTEM] xxxx [JOB2]' col
    from dual
 UNION ALL
 select '16/04/2014  20:17:25 XXX. Xxxxxxx   [SYSTEM_JOBS] xxx [POSTPONE_JOBS]' col
    from dual)
select * from t

我试图提取'‘和'’之间的代码,包括[]。

我的版本:

代码语言:javascript
复制
select regexp_substr(col, '(\[.*?\])', 1, level) col_substr,
       regexp_replace(regexp_substr(col, '(\[.*?\])', 1, level),
                      '(\[|])',
                      '') col_replace_substr
  from t
CONNECT BY regexp_substr(col, '(\[.*?\])', 1, level) is not null

我的版本运行良好,但我需要在没有函数regexp_replace,的情况下获得结果--我想在代码中使用一个函数。我只能用REGEXP_SUBSTR得到结果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-26 21:19:50

这个问题出现在“相关”一节中,尽管这是一个老问题,但它仍然是相关的,值得回答。恐怕原来的海报是不正确的,因为他的代码不工作良好,但返回无效的结果。他的示例返回14行,其中只有6个值被方括号包围。下面是一个正则表达式的示例,该正则表达式允许匹配模式后面跟着行尾,并显示行号和匹配号以进行验证。我希望这能帮助未来的搜索者:

代码语言:javascript
复制
SQL> with t(rownbr, col1) as (
    select 1, '16/04/2014  20:17:25 XXX. Xxxxxxx xxx xxx   [SYSTEM_JOBS] xxx [POSTPONE_JOBS] xxx [SYSTEM] xxxx [JOB2]' from dual
    UNION
    select 2, '16/04/2014  20:17:25 XXX. Xxxxxxx   [SYSTEM_JOBS] xxx [POSTPONE_JOBS]' from dual
   )
   SELECT rownbr, column_value match_number,
          regexp_substr(col1,'(\[.*?\])( |$)', 1, column_value, NULL, 1) col_substr,
          regexp_substr(col1,'\[(.*?)\]( |$)', 1, column_value, NULL, 1) col_replace_substr
     FROM t,
          TABLE(
            CAST(
              MULTISET(SELECT LEVEL
                          FROM dual
                          CONNECT BY LEVEL <= REGEXP_COUNT(col1, '\[.*?\]')
                      ) AS sys.OdciNumberList
            )
          )
    WHERE regexp_substr(col1,'(\[.*?\])( |$)', 1, column_value, NULL, 1) IS NOT NULL;

    ROWNBR MATCH_NUMBER COL_SUBSTR           COL_REPLACE_SUBSTR
---------- ------------ -------------------- --------------------
         1            1 [SYSTEM_JOBS]        SYSTEM_JOBS
         1            2 [POSTPONE_JOBS]      POSTPONE_JOBS
         1            3 [SYSTEM]             SYSTEM
         1            4 [JOB2]               JOB2
         2            1 [SYSTEM_JOBS]        SYSTEM_JOBS
         2            2 [POSTPONE_JOBS]      POSTPONE_JOBS

6 rows selected.

SQL>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23158121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档