使用oraclesql提取特定模式

使用oraclesql提取特定模式,sql,regex,oracle11gr2,Sql,Regex,Oracle11gr2,我有一根像 with xx as ( select 'id9' idno,'untest X456789,W357987 and Q321089 cont group' test from dual) select * from xx 下面是一些类似于下面的那些和行 IDNO | TEST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

我有一根像

with xx as (
select 'id9' idno,'untest X456789,W357987 and Q321089 cont group' test from dual)
select * from xx
下面是一些类似于下面的那些和行

       IDNO |                             TEST
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        id9 | untest X456789,W357987 and Q321089 cont group
我想提取以字母开头,后跟6位数字的单词。此外,它们之间应该有一个逗号(因为稍后我将把它们放在多行中)

结果表:

        IDNO |                TEST
      +++++++++++++++++++++++++++++++++++++++++
        id9 | X456789,X321678,W357987,Q321089
我尝试了
regexp\u replace
,但未能找到解决方案

select idno, REGEXP_replace( test,'([^[A-Z]{1}[:digit:]{6},?])') AS test from xx

以下内容满足您对原始字符串的要求:

with xx as (
select 'id9' idno,'untest X456789,W357987 and Q321089 cont group' test from dual
)
select idno,
       REGEXP_replace(test,
                      '([A-Z]{1}[0-9]{6}[ ,]?)|(.)', '\1'
                     ) AS test
from xx;
正在将第二个空格设为逗号。您可以使用常规替换:

with xx as (
select 'id9' idno,'untest X456789,W357987 and Q321089 cont group' test from dual
)
select idno,
       replace(REGEXP_replace(test,
                              '([A-Z]{1}[0-9]{6}[ ,]?)|(.)', '\1'
                             ),
               ' ', ',') AS test
from xx;

SQL FIDLE是。

以下内容满足您对原始字符串的要求:

with xx as (
select 'id9' idno,'untest X456789,W357987 and Q321089 cont group' test from dual
)
select idno,
       REGEXP_replace(test,
                      '([A-Z]{1}[0-9]{6}[ ,]?)|(.)', '\1'
                     ) AS test
from xx;
正在将第二个空格设为逗号。您可以使用常规替换:

with xx as (
select 'id9' idno,'untest X456789,W357987 and Q321089 cont group' test from dual
)
select idno,
       replace(REGEXP_replace(test,
                              '([A-Z]{1}[0-9]{6}[ ,]?)|(.)', '\1'
                             ),
               ' ', ',') AS test
from xx;

SQL FIDLE是。

您确定您的数据库已经规范化了吗?它是一个OLAP环境,专门进行了非规范化。(连接越少,代码越干净)。上表是从第三方机构收到的,不幸的是,我们没有机会根据我们的需要对其进行格式化。只要这是有意的,而不是因为对规范化理解不足,就可以了。祝你好运!:)你确定你的数据库是规范化的吗?它是一个OLAP环境,是有目的地非规范化的。(连接越少,代码越干净)。上表是从第三方机构收到的,不幸的是,我们没有机会根据我们的需要对其进行格式化。只要这是有意的,而不是因为对规范化理解不足,就可以了。祝你好运!:)Linoff先生,第一个查询没有更改原始字符串。第二个在所有单词之间加了逗号。@bonsvr。我为此道歉。我让它在SQLFiddle中工作,显然是将错误的查询复制回了答案。修好了,非常感谢。顺便说一句,他从你的书中学到了很多。在Linoff中,第一个查询没有对原始字符串进行更改。第二个在所有单词之间加了逗号。@bonsvr。我为此道歉。我让它在SQLFiddle中工作,显然是将错误的查询复制回了答案。修好了,非常感谢。顺便说一句,从你的书中学到了很多。