MySQL:在特定分隔符和下一个非唯一分隔符之间返回SUBSTR

时间:2015-08-17 14:18:02

标签: php mysql parsing delimiter substr

我正在尝试在两个分隔符之间返回一个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;

我无法在任何社区找到类似的解决方案。

非常感谢你的帮助, 拉斯

1 个答案:

答案 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;