我正在尝试在两个分隔符之间返回一个SUBSTR。问题是,第二个分隔符在整个字符串中是非唯一的。
示例:
testurl.de/some:text/& [uniquedelimiter] = texttoextract:sometext:someothertext
所以我想在“& [uniquedelimiter] =”和 next “之后提取字符串:”在唯一分隔符之后。 字符串中“:”的出现是可变的。
现在我正在使用双SUBSTRING_INDEX函数,但如果字符串包含多个“:”,则会出错。
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(list_of_urls, '&[uniquedelimiter]=',-1),':')
FROM url_table;
我无法在任何社区找到类似的解决方案。
非常感谢你的帮助, 拉斯
答案 0 :(得分:0)
这似乎有效,也许你可以对它进行排序,不确定:
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;