Чтобы извлечь конкретные строки из заданной строки в Oracle - PullRequest
1 голос
/ 13 марта 2019

выражение - BR65437812-909@-@BR12340000-990

Необходимо извлечь данное выражение и обновить в столбцах, например a = BR12340000, b = 990

Ответы [ 3 ]

1 голос
/ 13 марта 2019
select 
  SUBSTR(s, 1, INSTR(s, '-') - 1) as a, 
  SUBSTR(s, INSTR(s, '-', -1) + 1) as b 
from 
  (select 'BR65437812-909@-@BR12340000-990' as s from dual)

Используя SUBSTR(string, start, length), мы имеем следующие аргументы:

Для A:

  • строка для поиска
  • 1 как start и
  • (index_of_the_first_hyphen - 1) как length. INSTR(string, searchfor) дает нам индекс первого дефиса

Для B:

Используя SUBSTR(string, start), у нас есть аргументы:

  • строка для поиска
  • the (index_of_last_hyphen + 1) - на этот раз мы используем дополнительный INSTR(string, searchfor, startindex) аргумент startindex и устанавливаем его в -1; это заставляет его искать с конца строки и работать в обратном направлении, давая нам индекс последнего дефиса

Нам не нужен аргумент длины - SUBSTR без длины возвращает остаток строки до конца

Важно отметить, что INSTR с начальным индексом -1 выполняет поиск в обратном направлении, но всегда возвращает индекс с начала строки, а не с конца.

INSTR('dddde', 'd', -1)  
       12345            -- returns 4, because d is 4 from the start
       54321            -- it does not return 2, even though d is 2 from the "start" when searching backwards
0 голосов
/ 13 марта 2019

Вы можете использовать regexp_replace, чтобы сначала получить каждый символ после последнего знака @, а затем разделить его тире.

with t(str) as
(
select regexp_replace('BR65437812-909@-@BR12340000-990','.*@','') from dual
) 
select regexp_replace(str,'-.*','') as a,
       regexp_replace(str,'.*-','') as b
  from t;

A           B
----------  ---
BR12340000  990

Демо

0 голосов
/ 13 марта 2019
with s as (
select 'BR65437812-909@-@BR12340000-990' str from dual)
select regexp_substr(str, '[^-@]+', 1, 3) a, regexp_substr(str, '[^-@]+', 1, 4) b
from s;

A          B  
---------- ---
BR12340000 990
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...