【问题标题】:Extracting multiple numbers from string variable in Oracle从Oracle中的字符串变量中提取多个数字
【发布时间】:2013-01-14 17:22:55
【问题描述】:

我有一个 varchar 变量,其内容如下:'123,12,7654321,9998...'。 我在 Oracle 10gR2 工作。 如何实现以下输出格式?:

------
123
12
7654321
9998
...
------

谢谢!

【问题讨论】:

    标签: sql regex string oracle oracle10g


    【解决方案1】:

    试试这个:

    /* Formatted on 1/30/2013 1:24:07 PM (QP5 v5.227.12220.39724) */
    WITH val AS (SELECT '123,12,7654321,9998' txt FROM DUAL)
    SELECT REGEXP_SUBSTR (txt,
                  '[0-9]+|[a-z]+|[A-Z]+',
                  1,
                  lvl)
      FROM (SELECT txt,
               LEVEL lvl
          FROM val
        CONNECT BY LEVEL <=   LENGTH (txt)
                    - LENGTH (REPLACE (txt,
                               ','))
                    + 1)
    

    【讨论】:

    • 谢谢你,Swapna Mohan!它也有效!)你能推荐任何关于正则表达式的书吗?或者我只需要阅读 docs.oracle.com 吗?
    • 对不起,我不知道任何关于正则表达式的书籍。 docs.oracle.com 是我所使用的全部,当然还有我从事的项目中的代码。
    【解决方案2】:

    这是使用connect的一种方式:

    with str as (select '123,12,7654321,9998' as val from dual)
    select cast(regexp_substr(val,'[^,]+', 1, level) as int)
    from str
    connect by cast(regexp_substr(val, '[^,]+', 1, level) as int) is not null;
    

    我承认我是从 article 改编而来的。您要做的通常是放入一个名为“split”的函数中。

    【讨论】:

    • 嗯,谢谢你,戈登林诺夫!我会尝试采纳您的建议。不幸的是,我不知道通过演员连接...是时候学习了!)
    【解决方案3】:

    试试这个

    SELECT EXTRACTVALUE(COLUMN_VALUE,'text()') VALS 
    FROM XMLTABLE('123,12,7654321,9998');
    

    SELECT COLUMN_VALUE VALS FROM XMLTABLE('123,12,7654321,9998');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      相关资源
      最近更新 更多