как получить определенное количество символов перед шаблоном - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть значения, подобные приведенным ниже в моей таблице:

SER : 3-576509910214, 4182 5979WM

Сначала мне нужно удалить пробелы. затем получить 8 чисел до или после появления совпадающей строки 'WM'. Мне нужен выход для вышеуказанного значения как '41825979'. Мне нужно получить 8 номеров после каждого появления WM.

WM может встречаться в любом месте строки.

Как я могу сделать это с запросом Oracle SQL?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Чтобы взять 8 цифр до или после WM (после удаления пробелов), используйте следующее:

WITH Demo(t) AS
(
  SELECT 'SER : 3-576509910214, 4182 5979WM' FROM dual
  UNION ALL
  SELECT 'SER : 3-576509910214, 4182 5 979 WM' FROM dual
  UNION ALL
  SELECT 'SER : 3-576509910214,WM 4182 5979' FROM dual
)
SELECT
  REPLACE(COALESCE(
    REGEXP_SUBSTR(REPLACE(t, ' ', ''), '[0-9]{8}WM'),
    REGEXP_SUBSTR(REPLACE(t, ' ', ''), 'WM[0-9]{8}')
  ), 'WM', '')
FROM Demo
0 голосов
/ 18 сентября 2018

Это вернет строку цифр длиной до 8 из такой строки:

select replace(regexp_substr(replace(str, ' ', ''), '[0-9]{1,8}WM'), 'WM', '')

Если вы хотите до и после , просто изменитерисунок:

select replace(regexp_substr(replace(str, ' ', ''), '[0-9]{1,8}WM|WM[0-9]{1-8}'), 'WM', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...