MySQL: Return 特定定界符和下一个非唯一定界符之间的 SUBSTR
MySQL: Return SUBSTR between specific delimiter and next non-unique delimiter
我正在尝试 return 两个分隔符之间的 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;
我在任何社区都找不到类似的解决方案。
非常感谢您的帮助,
拉斯
这似乎有效,也许你可以排序,不确定:
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;
我正在尝试 return 两个分隔符之间的 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;
我在任何社区都找不到类似的解决方案。
非常感谢您的帮助, 拉斯
这似乎有效,也许你可以排序,不确定:
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;