我无法编写正则表达式来执行MySQL语法中需要的操作。
对于数据库表中的列http_referer
,我具有以下值:
https://www.example.com?id=123&true
我需要返回查询字符串参数uid
的值(在本例中为123
),才能插入另一个查询。
`SELECT * FROM sites WHERE id = (http_referer REGEXP 'uid=([0-9]+)&?')
这是我的查询,不起作用,可能是因为我试图传递一个PHP样式的正则表达式,而不是一个MySQL可以使用的正则表达式(但是,我知道MySQL甚至不支持捕获组,所以我有点受困)。
答案 0 :(得分:1)
如果您使用版本8之前的MySQL不支持REGEXP_REPLACE()
,则可以使用SUBSTRING_INDEX()提取字符串的一部分:
mysql> set @a = 'some.domain?id=123&true';
mysql> select substring_index( substring_index(@a, '?id=', -1), '&', 1) as result;
+--------+
| result |
+--------+
| 123 |
+--------+
如果您感兴趣的参数的位置不是固定的(即并非总是第一个),或者紧随其后的参数是可选的并且可能不存在,那么它就比较棘手,您必须添加更多逻辑
答案 1 :(得分:0)
旧主题,但此解决方案可能对没有 mysql 版本 8 的人有所帮助。
2 条注释:
SELECT
CONCAT(
CASE WHEN content LIKE '%id=?1%' THEN '1' ELSE '' END,
CASE WHEN content LIKE '%id=?2%' THEN '2' ELSE '' END,
CASE WHEN content LIKE '%id=?3%' THEN '3' ELSE '' END,
CASE WHEN content LIKE '%id=?4%' THEN '4' ELSE '' END,
CASE WHEN content LIKE '%id=?5%' THEN '5' ELSE '' END,
CASE WHEN content LIKE '%id=?6%' THEN '6' ELSE '' END,
CASE WHEN content LIKE '%id=?7%' THEN '7' ELSE '' END,
CASE WHEN content LIKE '%id=?8%' THEN '8' ELSE '' END,
CASE WHEN content LIKE '%id=?9%' THEN '9' ELSE '' END,
CASE WHEN content LIKE '%id=?0%' THEN '0' ELSE '' END,
CASE WHEN content LIKE '%id=?_1%' THEN '1' ELSE '' END,
CASE WHEN content LIKE '%id=?_2%' THEN '2' ELSE '' END,
CASE WHEN content LIKE '%id=?_3%' THEN '3' ELSE '' END,
CASE WHEN content LIKE '%id=?_4%' THEN '4' ELSE '' END,
CASE WHEN content LIKE '%id=?_5%' THEN '5' ELSE '' END,
CASE WHEN content LIKE '%id=?_6%' THEN '6' ELSE '' END,
CASE WHEN content LIKE '%id=?_7%' THEN '7' ELSE '' END,
CASE WHEN content LIKE '%id=?_8%' THEN '8' ELSE '' END,
CASE WHEN content LIKE '%id=?_9%' THEN '9' ELSE '' END,
CASE WHEN content LIKE '%id=?_0%' THEN '0' ELSE '' END,
CASE WHEN content LIKE '%id=?__1%' THEN '1' ELSE '' END,
CASE WHEN content LIKE '%id=?__2%' THEN '2' ELSE '' END,
CASE WHEN content LIKE '%id=?__3%' THEN '3' ELSE '' END,
CASE WHEN content LIKE '%id=?__4%' THEN '4' ELSE '' END,
CASE WHEN content LIKE '%id=?__5%' THEN '5' ELSE '' END,
CASE WHEN content LIKE '%id=?__6%' THEN '6' ELSE '' END,
CASE WHEN content LIKE '%id=?__7%' THEN '7' ELSE '' END,
CASE WHEN content LIKE '%id=?__8%' THEN '8' ELSE '' END,
CASE WHEN content LIKE '%id=?__9%' THEN '9' ELSE '' END,
CASE WHEN content LIKE '%id=?__0%' THEN '0' ELSE '' END
) id
FROM 'page?id=123' test WHERE test LIKE '%?id=%' and p.domain_id=18