【问题标题】:Oracle REGEXP_SUBSTR | Fetch string between two delimitersOracle REGEXP_SUBSTR |获取两个分隔符之间的字符串
【发布时间】:2018-02-28 10:31:08
【问题描述】:

我有一个字符串Organization, INC..Truck/Equipment Failure |C。我想在组织名称之后(两个“..”字符之后)和管道字符之前获取子字符串。所以输出字符串应该是-Truck/Equipment Failure。 你能帮忙吗?

我一直在尝试形成这样的正则表达式,但似乎不起作用。

select regexp_substr('Organization, INC..Truck/Equipment Failure |C', '[^.]+',1,2) from dual;

【问题讨论】:

    标签: sql oracle regexp-substr


    【解决方案1】:

    你可以用这个。

    SELECT REGEXP_SUBSTR ('Organization, INC..Truck/Equipment Failure |C',
                          '([^.]+)\|',
                          1,
                          1,
                          NULL,
                          1)
      FROM DUAL;
    

    编辑:这将完全匹配两个点,后跟一个或多个字符,而不是|,直到字符串结尾。

    SELECT REGEXP_SUBSTR ('Organization, INC..Truck/Equipment Failure',
                          '\.{2}([^|]+)',
                          1,
                          1,
                          NULL,
                          1)
      FROM DUAL;
    

    DEMO

    【讨论】:

    • 感谢 Kaushik 的快速响应。这可行,但有一个问题。如果输入字符串为Organization, INC..Truck/Equipment Failure,即不带管道子字符串,则返回NULL。在这种情况下,它应该返回Truck/Equipment Failure。你能帮忙吗?
    • @AmitJagtap :所以这意味着在某些情况下你没有管道。那我们应该依靠什么呢?字符串结尾?是只有这两种情况还是有其他格式?
    • 只有两种情况:Organization, INC..Truck/Equipment Failure |COrganization, INC..Truck/Equipment Failure
    • @AmitJagtap :不客气。在提问时最好包括所有预期的情况以避免混淆。
    • 嗨,在 oracl 10g 中有没有办法解决这个问题
    【解决方案2】:

    经典的 SUBSTR + INSTR 选项:

    SQL> with test as (select 'Organization, INC..Truck/Equipment Failure |C' col from dual)
      2  select substr(col, instr(col, '..') + 2,
      3                     instr(col, '|') - instr(col, '..') - 2
      4                ) result
      5  from test;
    
    RESULT
    ------------------------
    Truck/Equipment Failure
    
    SQL>
    

    【讨论】:

      最近更新 更多