PL\SQL 中不同字符串的 Regexp substr 起始位置

Regexp substr starting position in different strings in PL\SQL

我有这样的字符串:

16.09.D 25435 11141 Joseph Martin Smith 3333 Kairo 

Bristol 2223 Anna Franklin

Soul 23333333 Henry Bayes

我只想从这些字符串中获取名称。解决方法是名称始终在数字之后,但如您所见,在第一个字符串中,名称 John Smith 之后有数字。 我的代码现在是:

regexp_substr(string, '([0-9]+ )([^0-9]+\D)', 1, 1, 'i', 2))

问题是,从第一个字符串,我得到了名字,但后面会有一个 whitespace 字符。我怎样才能只从第一个字符串中获取名称,后面没有任何 whitespaces

您可以使用 LTRIM 删除字符串左侧的空格,使用 RTRIM 删除右侧的空格。见下文:

SELECT 
       regexp_substr('16.09.D 25435 11141 Joseph Martin Smith 3333 Kairo', '([0-9]+ )([^0-9]+\D)', 1, 1, 'i', 2) Orig_Strng,
       ltrim(rtrim(regexp_substr('16.09.D 25435 11141 Joseph Martin Smith 3333 Kairo', '([0-9]+ )([^0-9]+\D)', 1, 1, 'i', 2))) Spce_removed
FROM dual;

检查:

SELECT 
        LENGTH(regexp_substr('16.09.D 25435 11141 Joseph Martin Smith 3333 Kairo', '([0-9]+ )([^0-9]+\D)', 1, 1, 'i', 2)) Orig_Strng,
        LENGTH(ltrim(rtrim(regexp_substr('16.09.D 25435 11141 Joseph Martin Smith 3333 Kairo', '([0-9]+ )([^0-9]+\D)', 1, 1, 'i', 2)))) Spce_removed
from dual;

    Output:

    Orig_Strng    Spce_removed
    -----         -----
     20            19