首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle regexp -列和行的分区值

oracle regexp -列和行的分区值
EN

Stack Overflow用户
提问于 2019-04-09 07:02:58
回答 1查看 182关注 0票数 1

Oracle DB I在一个单元格中有值-示例:

代码语言:javascript
复制
 ID     TEXT
  1      textText text №1-2-3 texttext, text,text №1 - 1000
         textText text №1-2-3 texttext, text,text №2 - 1030

  2      textText text №1-2-3 texttext, text,text №3 - 1031
         textText text №1-2-3 texttext, text,text №4 - 1032
         textText text №1-2-3 texttext, text,text №5 - 1033

需要选择如下:

代码语言:javascript
复制
 ID     TEXT                                            NUM
  1     textText text №1-2-3 texttext, text,text №1     1000
  1     textText text №1-2-3 texttext, text,text №2     1030
  2     textText text №1-2-3 texttext, text,text №3     1031
  2     textText text №1-2-3 texttext, text,text №4     1032
  2     textText text №1-2-3 texttext, text,text №5     1033

尝试regexp_substr,但我可以将文本、NUM和NUM作为新记录进行分区。我需要分区文本和NUM,然后转到新记录。

我的尝试是:

代码语言:javascript
复制
 select regexp_substr(str, '^[^—]+', 1, level) TEXT,
        regexp_substr(str, '[0-9]+$', 1, level) NUM
 from   (select 'textText text №1-2-3 texttext, text,text №1 — 1000
                 textText text №1-2-3 texttext, text,text №2 — 1030'
         str from dual)
 CONNECT BY regexp_substr(str, '^[^—]+', 1, level) is not null;

结果只有一个字符串,而不是2和NUM --最后一个值,而不是当前值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-09 08:10:27

代码语言:javascript
复制
with tab(id,txt) as(
 select 1 as id , 'textText text №1-2-3 texttext, text,text №1 - 1000'||CHR(13)||CHR(10)||
                  'textText text №1-2-3 texttext, text,text №2 - 1030' as txt from dual union all
 select 2, 'textText text №1-2-3 texttext, text,text №3 - 1031'||CHR(13)||CHR(10)||
           'textText text №1-2-3 texttext, text,text №4 - 1032'||CHR(13)||CHR(10)||
           'textText text №1-2-3 texttext, text,text №5 - 1033' as txt from dual        


)
select t.*
      ,substr(t.value,instr4(t.value,'-',-1)+2) as num
from (
    select id
         , regexp_substr(txt,'^.*$', 1, level,'m') as value
    from tab
    connect by regexp_substr(txt,'^.*$', 1, level,'m') is not null
    and prior id = id
    and prior sys_guid() is not null
) t

结果

代码语言:javascript
复制
1   textText text ?1-2-3 texttext, text,text ?1 - 1000     1000
1   textText text ?1-2-3 texttext, text,text ?2 - 1030     1030
2   textText text ?1-2-3 texttext, text,text ?3 - 1031     1031
2   textText text ?1-2-3 texttext, text,text ?4 - 1032     1032
2   textText text ?1-2-3 texttext, text,text ?5 - 1033     1033
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55586868

复制
相关文章

相似问题

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