Вот один из способов сделать это, используя исключительно стандартные строковые функции (без регулярных выражений). Функция rtrim
просто удаляет цифры в конце входной строки. Затем replace
заменяет эту строку (входная строка минус цифры в конце) из исходной строки - следовательно, оставляя "цифры в конце" в выводе.
with
sample_data (str) as (
select '100AUS50' from dual union all
select '100AUS100' from dual union all
select '100AUS500' from dual union all
select 'Jan-20' from dual union all
select 'Four200' from dual union all
select null from dual union all
select '200abc' from dual union all
select '3' from dual
)
select str, replace(str, rtrim(str, '0123456789')) as last_digits
from sample_data
;
STR LAST_DIGITS
--------- -----------
100AUS50 50
100AUS100 100
100AUS500 500
Jan-20 20
Four200 200
200abc
3 3
В прошлом я бы просто сказал, что «стандартные строковые функции обычно быстрее, чем регулярные выражения». Однако, если повезет, я только что ответил на тот же вопрос в OTN несколько дней go, и постер спросил о сравнении производительности. На выборке из 1,5 миллиона входных строк решение, которое я только что показал, было в пять раз быстрее (0,86 секунды против 4,4 секунды для решения регулярного выражения). https://community.oracle.com/message/15598613#15598613