【问题标题】:Find substring after nth occurrence of substring in a string in oracle在oracle中的字符串中第n次出现子字符串后查找子字符串
【发布时间】:2018-08-24 15:01:11
【问题描述】:

我想编写一个 oracle 查询来查找特定子字符串第 n 次出现后的子字符串找不到解决方案 示例字符串 - ab##cd##gh 如何从上面的字符串中获取 gh,即第二次出现 ##

后的字符串

【问题讨论】:

  • 经典问题,请告诉我们到目前为止您尝试了什么?
  • 可以有两个以上连续的#吗?如果有,应该如何处理?例如:ab###cde##fg - 第一次出现在 ab 之后。 second 出现在abcde 之间的第二个和第三个# 吗?还是cdefg 之间的那个?另外:在abcd####xyz 中,第一次出现是前两个#,第二次出现第三和第四个#,它们之间的子字符串是空字符串(与Oracle 中的null 相同)?你有没有考虑过这些问题?在编写任何类型的代码之前,必须先回答它们。
  • 嗨,欢迎来到 SO。如果您为此编写了无法开始工作的代码,那么您来对地方了。只需编辑您的问题并将代码的相关部分添加到其中即可。您需要展示自己的努力,因为 Stack Overflow 不是为我编写代码的服务。请参阅How to Ask

标签: oracle


【解决方案1】:

这将在 ## 第二次出现后返回所有内容:

substr(string, instr(string, '##', 1, 2)+1) 

如果你需要找到一个特定长度的子字符串,那么只需在 substr 函数中添加第三个参数

substr(string, instr(string, '##', 1, 2)+1, 2) 

您也可以在查询中使用它:

select 
  substr(some_value, instr(some_value, '##', 1, 2)+1, 2) 
from some_table
where...

【讨论】:

    【解决方案2】:
     SELECT 'ab##cd##gh' String,
     Substr('ab##cd##gh',Instr('ab##cd##gh','gh',-1,1),2) Substr
     FROM Dual;
    

    STRING          SU
    ----------      --
    ab##cd##gh      gh
    

    【讨论】:

    • 这已经有一个格式化和接受的答案。您能否格式化您的答案并提供为什么它比公认的答案更好/增加了什么?
    • 我已经格式化了你的答案,但你仍然应该尝试解释它是如何工作的。
    猜你喜欢
    • 2021-02-10
    • 2010-12-25
    • 1970-01-01
    • 2018-03-22
    • 2016-05-07
    • 2011-08-06
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多