【问题标题】:Oracle Substring after specific character特定字符后的 Oracle 子字符串
【发布时间】:2013-04-09 08:48:04
【问题描述】:

我已经发现我需要使用 substr/instr 或 regex,但是通过阅读有关这些的文档,我无法完成... 我在 Oracle 11.2 上。

这就是我所拥有的。 字符串列表,如:

743H5-34L-56
123HD34-7L
12HSS-34R
23Z67-4R-C23

我需要的是第一个“-”之后的数字(长度 1 或 2),直到出现“L”或“R”。

有什么建议吗?

【问题讨论】:

    标签: regex oracle substr


    【解决方案1】:
    regexp_replace(string, '^.*?-(\d+)[LR].*$', '\1')
    

    fiddle

    【讨论】:

    • 成功了,谢谢!当一个人不那么深入时,语法非常混乱......至少在创建语句时。我旁边的doku可以理解=)
    【解决方案2】:

    另一个版本(没有花哨的外观:-):

    with v_data as (
      select '743H5-34L-56' val from dual
      union all
      select '123HD34-7L' val from dual
      union all 
      select '12HSS-34R' val from dual
      union all
      select '23Z67-4R-C23' val from dual
    )
    select 
      val, 
      regexp_replace(val, '^[^-]+-(\d+)[LR].*', '\1') 
    from v_data
    

    匹配

    • 字符串“^”的开头
    • 一个或多个不是“-”“[^-]+”的字符
    • 后跟一个“-”“-”
    • 后跟一个或多个数字(将它们捕获在一个组中)“(\d+)”
    • 后跟“L”或“R”“[LR]”
    • 后跟零个或多个任意字符“.*”

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      相关资源
      最近更新 更多