Индекс подстроки в случае повторяющихся строк в SQL - PullRequest
0 голосов
/ 08 января 2019

Мне нужен запрос SQL, чтобы получить значение между двумя известными строками, которые повторяются много раз или дважды. Пример.

base- 2019|ACX9|PTG-C|PPP1-MMM1|7986847

Желаемый результат - PPP1 в источнике и MMM1 в store_loc.

Я до сих пор придумал это

select
base,
substring_index(substring_index (base,'-',1),'|',-1) as source, 
substring_index(substring_index (base,'-',-1),'|',1) as store_loc

from order_tracking

который отлично работает с базой как

2019|ACX9|PTGA|PPP1-MMM1|7986847

но не работает с базой как

2019|ACX9|PTG-C|PPP1-MMM1|7986847

Здесь он указывает источник как PTG.

Может кто-нибудь помочь мне с тем, где я иду не так?

1 Ответ

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

Похоже, вы хотите проанализировать предпоследний элемент в списке с разделителями. Вы должны сначала получить это, а затем разделить. Это три substring_index() с:

select substring_index(substring_index(substring_index(base, '|', -2), '|', 1), '-', 1), as source,
       substring_index(substring_index(substring_index(base, '|', -2), '|', 1), '-', -1) as store_loc    
from (select '2019|ACX9|PTG-C|PPP1-MMM1|7986847' as base) x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...