MySQL: вернуть SUBSTR между определенным разделителем и следующим неуникальным разделителем

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

Пример:

testurl.de/some:text/&[Uniquedelimiter] = texttoextract: SOMETEXT: someothertext

Поэтому я хочу извлечь строку между&[uniquedelimiter] = «и следующий «:» после уникального разделителя.
Вхождение «:» в строке является переменной.

Прямо сейчас я использую двойную функцию SUBSTRING_INDEX, но я получаю ошибки, если строка содержит более одного «:».

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(list_of_urls, '&[uniquedelimiter]=',-1),':')
FROM url_table;

Я не мог найти сопоставимое решение ни в одном сообществе.

Спасибо большое за вашу помощь,
Lars

1

Решение

Кажется, это работает, может быть, вы можете отсортировать его, не уверен:

SELECT
SUBSTRING(
url,
(POSITION('&[uniquedelimiter]=' IN url) + LENGTH('&[uniquedelimiter]=')),
LOCATE(':', url, (POSITION('&[uniquedelimiter]=' IN url) + LENGTH('&[uniquedelimiter]='))) -
(POSITION('&[uniquedelimiter]=' IN url) + LENGTH('&[uniquedelimiter]='))
)
from bla

Моя стратегия была такой:

SET @url                   = (SELECT url from bla limit 1);
SET @pos_uniq_deli_start   = POSITION('&[uniquedelimiter]=' IN @url);
SET @uniq_deli_length      = LENGTH('&[uniquedelimiter]=');
SET @pos_uniq_deli_end     = @pos_uniq_deli_start + @uniq_deli_length;
--                           LOCATE(char, field, offset)
SET @pos_colon_after_deli  = LOCATE(':', @url, @pos_uniq_deli_end);
SET @delta_unqi_del_colon  = @pos_colon_after_deli - @pos_uniq_deli_end;

--            SUBSTRING(field, start_pos, length)
SET @result = SUBSTRING(@url,@pos_uniq_deli_end, @delta_unqi_del_colon);
SELECT @result;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]