【问题标题】:How do I Select a substring in Oracle SQL after a specific word in the string?如何在字符串中的特定单词之后选择 Oracle SQL 中的子字符串?
【发布时间】:2020-12-30 10:05:35
【问题描述】:

我正在尝试提取单词“Hændelse”之后的以下字符串中的所有内容。

字符串:

Recordtype001[ efternavn = Nymark.] Adr2: 7020 Trondheim Hændelse A06: Udrejse er modtaget fra CPR-registeret.

我曾尝试使用 REGEXP_SUBSTR - 但它只返回字符串 't."' 的结尾。

我希望它返回

A06: Udrejse er modtaget fra CPR-registeret.

这是我尝试过的:

WITH data AS
 (
    SELECT '"Recordtype001[ efternavn = Nymark.] Adr2: 7020 Trondheim Hændelse A06: Udrejse er modtaget fra CPR-registeret."' string 
    FROM dual
 )
 SELECT string,
        REGEXP_SUBSTR(string, '[^Hændelse]+$') new_string
 FROM data;

【问题讨论】:

  • 括号使它成为一个否定字符类。尝试类似Hændelse.*
  • 这个怎么样: WITH data AS ( SELECT '"Recordtype001[ efternavn = Nymark.] Adr2: 7020 Trondheim Hændelse A06: Udrejse er modtaget fra CPR-registeret."' string, 'Hændelse' 查找 FROM dual ) SELECT string, SUBSTR(REGEXP_SUBSTR(string, lookfor||'.+'),LENGTH(lookfor)+2) new_string FROM data;

标签: sql regex string oracle


【解决方案1】:

您的正则表达式不符合您的要求。您正在定义一个字符类,该字符类不得包含字符串“Hændelse'”中的字符。基本上它在字符串末尾寻找除'H''æ''n''d''e''l''s''e'以外的一系列字符。

一个选项是regexp_replace():

regexp_replace(string, '^.*Hændelse\s*', '') new_string

请注意,使用简单的字符串函数会更有效地完成此操作(虽然有点复杂):

ltrim(substr(string, instr(string, 'Hændelse') + length('Hændelse'))) new_string 

【讨论】:

  • 我是这个网站的新手 - 我如何评价答案。这是完美的:-)
猜你喜欢
  • 2015-06-22
  • 2014-10-03
  • 2020-03-19
  • 2018-03-14
  • 2018-10-25
  • 2018-09-30
  • 2020-05-12
  • 2020-10-25
  • 1970-01-01
相关资源
最近更新 更多