【问题标题】:How to extract value between 2 slashes如何在两个斜杠之间提取值
【发布时间】:2018-02-07 19:58:36
【问题描述】:

我有一个像“1490/2334/5166400411000434”这样的字符串,我需要在第二个斜杠之后从中获取值。我尝试了以下逻辑

select REGEXP_SUBSTR('1490/2334/5166400411000434','[^/]+',1,3) from dual;

它工作正常。但是当我在第一个和第二个斜杠之间没有价值时,它会返回空白。 例如我的字符串是“1490//5166400411000434”,我正在尝试

select REGEXP_SUBSTR('1490//5166400411000434','[^/]+',1,3) from dual;

它返回空白。
请建议我缺少什么。

【问题讨论】:

    标签: sql oracle11g


    【解决方案1】:

    如果我理解得很好,你可能需要

    regexp_substr(t, '(([^/]*/){2})([^/]*)', 1, 1, 'i', 3)
    

    这会处理前两个部分,例如'xxx/',然后检查一系列非/ 字符;参数3 用于获取第三个匹配的子表达式,这就是你想要的。 例如:

    with test(t) as (
        select '1490/2334/5166400411000434' from dual union all
        select '1490//5166400411000434' from dual union all
        select '1490//5166400411000434/ramesh/3344' from dual
    )
    select t, regexp_substr(t, '(([^/]*/){2})([^/]*)', 1, 1, 'i', 3) as substr
    from test    
    

    给出:

    T                                  SUBSTR                            
    ---------------------------------- ----------------------------------
    1490/2334/5166400411000434         5166400411000434                  
    1490//5166400411000434             5166400411000434                  
    1490//5166400411000434/ramesh/3344 5166400411000434    
    

    【讨论】:

      【解决方案2】:

      您可以REVERSE() 您的字符串并获取第一个斜杠之前的值。然后再反向得到想要的输出。

      select reverse(regexp_substr(reverse('1490//5166400411000434'), '[^/]+', 1, 1)) from dual;
      

      也可以用基本的子字符串和instr函数来完成:

      select reverse(SUBSTR(reverse('1490//5166400411000434'), 0, INSTR(reverse('1490//5166400411000434'), '/')-1)) from dual;
      

      【讨论】:

      • 感谢您的帮助。实际上我想得到第二个和第三个斜杠之间的值,即 5166400411000434。我的输入字符串可能包含许多斜杠,如 '1490//5166400411000434/ramesh/3344'。
      【解决方案3】:

      使用 REGEXP_SUBSTR 中的其他选项来匹配模式

      select REGEXP_SUBSTR('1490//5166400411000434','(/\d*)/(\d+)',1,1,'x',2) from dual
      

      基本上它是找到两个/包括数字的模式,从 1 开始,出现 1 次并忽略空格 ('x'),然后输出 () 内的第二个表达式中的第二个子表达式 ... 模式,1,1,'x',subexp2)

      【讨论】:

        猜你喜欢
        • 2015-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 1970-01-01
        相关资源
        最近更新 更多