首页 > 解决方案 > 如何在字符串中的特定单词之后选择 Oracle SQL 中的子字符串?

问题描述

我试图在“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;

标签: sqlregexstringoracle

解决方案


您的正则表达式不符合您的要求。您正在定义一个字符类,该字符类不得包含字符串 ' 中的字符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 

推荐阅读