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

时间:2018-06-11 09:06:44

标签: plsql substring substr regexp-substr

我有这样的字符串:

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

1 个答案:

答案 0 :(得分:1)

您可以使用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