【问题标题】:How parse numbers from https arddress in Oracle SQL?如何从 Oracle SQL 中的 https 地址解析数字?
【发布时间】:2016-03-14 08:19:01
【问题描述】:

我想从 https-address 中提取两个字符串集。我正在使用 Oracle 11g,这是我的数据和我的解决方案:

with mcte as (
select 'https://id.adsf.fi/dfad2/services/org/Organizations/9884752-6/2542595-3/Corlsdf-asdf/Corlsdf/MOB50202282' as addr from dual
union all 
select 'https://id.asdf.fi/dfad2/services/org/Organizations/2435213-2/Corlsdf-asdf/Corlsdf/KVY239229' as addr from dual
union all
select 'https://id.asdf.fi/dfad2/services/org/Organizations/6356334-0' as addr from dual
union all
select 'https://id.asdf.fi/dfad2/services/org/Organizations/6356334-0/6356324-0' as addr  from dual
union all
select 'https://id.asdf.fi/dfad2/services/org/Organizations/6356334-0/6356324-0/' as addr from dual
)
select  addr, 
        REGEXP_SUBSTR(addr,  '(Organizations\/)(\d+)', 1, 1, null, 2) AS num1,
        REGEXP_SUBSTR(addr,  '(Organizations\/)(\d+)', 1, 1, null, 3) AS num2
from mcte
;

这不会产生正确的集合,对于 NUM1 和 NUM2 应该是这样的

+----------------------------------------------------------------------------------------------------------+-----------+-----------+
|                                                    id                                                    |   num1    |   num2    |
+----------------------------------------------------------------------------------------------------------+-----------+-----------+
| https://id.adsf.fi/dfad2/services/org/Organizations/9884752-6/2542595-3/Corlsdf-asdf/Corlsdf/MOB50202282 | 9884752-6 | 2542595-3 |
| https://id.asdf.fi/dfad2/services/org/Organizations/2435213-2/Corlsdf-asdf/Corlsdf/KVY239229             | 2435213-2 | NULL      |
| https://id.asdf.fi/dfad2/services/org/Organizations/6356334-0                                            | 6356334-0 | NULL      |
| https://id.asdf.fi/dfad2/services/org/Organizations/6356334-0/6356324-0                                  | 6356334-0 | 6356324-0 |
| https://id.asdf.fi/dfad2/services/org/Organizations/6356334-0/6356324-0/                                 | 6356334-0 | 6356324-0 |
+----------------------------------------------------------------------------------------------------------+-----------+-----------+

我怎样才能做到这一点?

【问题讨论】:

    标签: sql regex oracle oracle11g


    【解决方案1】:

    你的表达不正确/不完整:

    1. 您只查找数字 (\d),而不是查找减号 ([0-9-])。
    2. 他们缺少您要查找的第二个号码。

    应该是这样的:

    REGEXP_SUBSTR(addr, '(Organizations\/)([0-9-]+)', 1, 1, null, 2) AS num1,
    REGEXP_SUBSTR(addr, '(Organizations\/)([0-9-]+)\/([0-9-]+)', 1, 1, null, 3) AS num2
    

    【讨论】:

      【解决方案2】:

      尝试以下方法:

      REGEXP_SUBSTR(addr,  '(Organizations\/)([^\/]+)', 1, 1, null, 2) AS num1,
      REGEXP_SUBSTR(addr,  '(Organizations\/)([^\/]+\/)([0-9\-]+)', 1, 1, null, 3) AS num2
      

      首先是:跳过Organizations/ 并在符号不是/ 时获取所有内容。

      第二个是:跳过Organizations/..../,然后取连续数字和-

      这是小提琴http://sqlfiddle.com/#!4/9eecb7d/12905

      【讨论】:

        【解决方案3】:

        REGEXP_SUBSTR 的第四个参数是出现参数。这应该可以让您到达您需要去的地方:

        with mcte as (
        select 'https://id.adsf.fi/dfad2/services/org/Organizations/9884752-6/2542595-3/Corlsdf-asdf/Corlsdf/MOB50202282' as addr from dual
        union all 
        select 'https://id.asdf.fi/dfad2/services/org/Organizations/2435213-2/Corlsdf-asdf/Corlsdf/KVY239229' as addr from dual
        union all
        select 'https://id.asdf.fi/dfad2/services/org/Organizations/6356334-0' as addr from dual
        union all
        select 'https://id.asdf.fi/dfad2/services/org/Organizations/6356334-0/6356324-0' as addr  from dual
        union all
        select 'https://id.asdf.fi/dfad2/services/org/Organizations/6356334-0/6356324-0/' as addr from dual
        )
        select  REGEXP_SUBSTR(addr, '/([[:digit:]\-])+', 1, 1) AS p1,
                REGEXP_SUBSTR(addr, '/([[:digit:]\-])+', 1, 2) AS p2
        from mcte;
        

        结果:

        p1          p2
        /9884752-6  /2542595-3
        /2435213-2  
        /6356334-0  
        /6356334-0  /6356324-0
        /6356334-0  /6356324-0
        

        【讨论】:

          猜你喜欢
          • 2021-08-15
          • 1970-01-01
          • 2012-12-25
          • 2015-09-14
          • 1970-01-01
          • 2021-07-13
          • 2017-01-13
          • 2022-11-06
          • 1970-01-01
          相关资源
          最近更新 更多