Oracle SQL regexp_substr для поиска чисел в строке

Я хочу использовать regexp_substr для возврата числа после символов из строкового значения.

например. Возврат строкового значения 100AUS50 50 100AUS100 100 100AUS500 500
20 января 20 Four200 200


person user15676    schedule 21.04.2020    source источник


Ответы (2)


Вы можете использовать ниже, чтобы получить номер

 select regexp_substr(column,'\d+$') from TABLE;
person psaraj12    schedule 21.04.2020

Вот один из способов сделать это, используя исключительно стандартные строковые функции (без регулярных выражений). Функция 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

person mathguy    schedule 21.04.2020