Я хочу использовать regexp_substr для возврата числа после символов из строкового значения.
например. Возврат строкового значения 100AUS50 50 100AUS100 100 100AUS500 500
20 января 20 Four200 200
Я хочу использовать regexp_substr для возврата числа после символов из строкового значения.
например. Возврат строкового значения 100AUS50 50 100AUS100 100 100AUS500 500
20 января 20 Four200 200
Вы можете использовать ниже, чтобы получить номер
select regexp_substr(column,'\d+$') from TABLE;
Вот один из способов сделать это, используя исключительно стандартные строковые функции (без регулярных выражений). Функция 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 несколько дней назад, и постер спросил о сравнении производительности. На выборке из 1,5 миллиона входных строк решение, которое я только что показал, было в пять раз быстрее (0,86 секунды против 4,4 секунды для решения с регулярным выражением). https://community.oracle.com/message/15598613#15598613