Oracle SQL regexp_substr, чтобы найти числа в строке - PullRequest
0 голосов
/ 21 апреля 2020

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

например. Строка Возвращаемое значение 100AUS50 50 100AUS100 100 100AUS500 500
Янв-20 20 Four200 200

Ответы [ 2 ]

0 голосов
/ 21 апреля 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 несколько дней go, и постер спросил о сравнении производительности. На выборке из 1,5 миллиона входных строк решение, которое я только что показал, было в пять раз быстрее (0,86 секунды против 4,4 секунды для решения регулярного выражения). https://community.oracle.com/message/15598613#15598613

0 голосов
/ 21 апреля 2020

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

 select regexp_substr(column,'\d+$') from TABLE;
...