Я пытаюсь вернуть 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
Кажется, это работает, может быть, вы можете отсортировать его, не уверен:
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;
Других решений пока нет …