起始位置在字符串末尾的正则表达式 substr PL/SQL
Regexp substr with start position at the end of the string PL/SQL
我有这样的字符串:
WORK 123 John Smith
10.01.D 5132 3330 Selena Amirez
300 TK30 000 Edvard Ramirez
我只想把名字写到最后。我有这样的代码:
regexp_substr(string, '([0-9])( +)(.*)', 1, 1, 'i', 3))
但它只适用于第一行,其中只有一个数字。我的想法是从末尾开始写,因为名字总是在末尾。所以我想把名字写出来,起始位置总是最后一个数字的最后一位。
所以我想看到的是:
John Smith
Selena Amirez
Edvard Ramirez
提前致谢。
这可能是一种方式:
select regexp_substr(str, '([0-9]+ )([^0-9]*$)', 1, 1, 'i', 2)
from (
select 'WORK 123 John Smith' str from dual union
select '10.01.D 5132 3330 Selena Amirez' from dual union
select '300 TK30 000 Edvard Ramirez' from dual
)
给出:
Selena Amirez
Edvard Ramirez
John Smith
这会获取字符串的非数字部分($ 是字符串的末尾),它跟在数字部分和 space.
之后
另一个选项:
SQL> with test (col) as
2 (select 'WORK 123 John Smith' from dual union
3 select '10.01.D 5132 3330 Selena Amirez' from dual union
4 select '300 TK30 000 Edvard Ramirez' from dual
5 )
6 select col, trim(regexp_substr(col, '(\D)+$')) result
7 from test;
COL RESULT
------------------------------- -------------------------------
10.01.D 5132 3330 Selena Amirez Selena Amirez
300 TK30 000 Edvard Ramirez Edvard Ramirez
WORK 123 John Smith John Smith
SQL>
我有这样的字符串:
WORK 123 John Smith
10.01.D 5132 3330 Selena Amirez
300 TK30 000 Edvard Ramirez
我只想把名字写到最后。我有这样的代码:
regexp_substr(string, '([0-9])( +)(.*)', 1, 1, 'i', 3))
但它只适用于第一行,其中只有一个数字。我的想法是从末尾开始写,因为名字总是在末尾。所以我想把名字写出来,起始位置总是最后一个数字的最后一位。
所以我想看到的是:
John Smith
Selena Amirez
Edvard Ramirez
提前致谢。
这可能是一种方式:
select regexp_substr(str, '([0-9]+ )([^0-9]*$)', 1, 1, 'i', 2)
from (
select 'WORK 123 John Smith' str from dual union
select '10.01.D 5132 3330 Selena Amirez' from dual union
select '300 TK30 000 Edvard Ramirez' from dual
)
给出:
Selena Amirez
Edvard Ramirez
John Smith
这会获取字符串的非数字部分($ 是字符串的末尾),它跟在数字部分和 space.
之后另一个选项:
SQL> with test (col) as
2 (select 'WORK 123 John Smith' from dual union
3 select '10.01.D 5132 3330 Selena Amirez' from dual union
4 select '300 TK30 000 Edvard Ramirez' from dual
5 )
6 select col, trim(regexp_substr(col, '(\D)+$')) result
7 from test;
COL RESULT
------------------------------- -------------------------------
10.01.D 5132 3330 Selena Amirez Selena Amirez
300 TK30 000 Edvard Ramirez Edvard Ramirez
WORK 123 John Smith John Smith
SQL>