Regexp substr начальная позиция в разных строках в PL \ SQL - PullRequest
0 голосов
/ 11 июня 2018

У меня есть такие строки:

16.09.D 25435 11141 Joseph Martin Smith 3333 Kairo 

Bristol 2223 Anna Franklin

Soul 23333333 Henry Bayes

Я хочу получить только имена из этих строк.Дело в том, что имена всегда идут после цифр, но, как вы можете видеть, в первой строке после имени Джона Смита есть цифры.Мой код теперь:

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

Проблема в том, что из первой строки я получаю имя, но после этого будет символ whitespace.Как я могу получить только имя из первой строки, без whitespaces после нее?

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете использовать 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
...