Получить первое вхождение слова в строке через запятую - PullRequest
0 голосов
/ 30 января 2019

У меня есть специальное поле в базе данных, которое называется products, в котором данные хранятся через запятую.

Что я хочу сделать, это получить первое вхождение слова во всей строке, которая содержит символы «IN», а затем получить число, которое следует после «IN».

Я попробовал следующий код, но он вернет "15,12".

products = "IN15,IN12"

products = "IN 15,IN12"

products = "TEST,IN15"

WHEN REGEXP_LIKE(products, '^IN') THEN regexp_replace(products, '[^0-9]', '')

Во всех вышеперечисленных случаях, когда после IN стоит запятая или нет запятой, я бы хотел, чтобы на выходе было «15».

1 Ответ

0 голосов
/ 30 января 2019

Как-то так?

SQL> with test (products) as
  2    (select 'IN15,IN12'  from dual union all
  3     select 'IN 15,IN12' from dual union all
  4     select 'TEST,IN15'  from dual
  5    )
  6  select products,
  7    regexp_substr(substr(products, instr(products, 'IN') + 2), '\w+') result
  8  from test;

PRODUCTS   RESULT
---------- ----------------------------------------
IN15,IN12  15
IN 15,IN12 15
TEST,IN15  15

SQL>

Что он делает:

  • INSTR находит вхождение IN в строке
  • SUBSTR возвращает все, что следует за первым IN
  • REGEXP_SUBSTR извлекает первое слово в этой подстроке
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...