Mysql 如何在查询中从url提取id?
我有一个表,其中一列包含许多URL,如下所示:Mysql 如何在查询中从url提取id?,mysql,regex,Mysql,Regex,我有一个表,其中一列包含许多URL,如下所示: https://myshop.com/lv/buitine-technika-elektronika/virtuves-iranga/virduliai/virdulys-elektrinis-virdulys-forme-fkg-147?id=22031685 我想从URL中提取id,但我不知道如何做。稍后,我可以在Python中使用以下regex轻松完成此操作: \?id\=(\d+) 但如果可能的话,我希望在使用python之前在查询中
https://myshop.com/lv/buitine-technika-elektronika/virtuves-iranga/virduliai/virdulys-elektrinis-virdulys-forme-fkg-147?id=22031685
我想从URL中提取id,但我不知道如何做。稍后,我可以在Python中使用以下regex
轻松完成此操作:
\?id\=(\d+)
但如果可能的话,我希望在使用python之前在查询中准备尽可能多的数据。我知道如何在MySQLwhere
子句中使用regex,但不知道如何在其他地方使用它。有办法做到这一点吗
ID长度可以不同,之后可能会有其他内容…如果每个URL都只有一个
ID
查询参数,那么我们可以使用子字符串索引:
SELECT SUBSTRING_INDEX(url, '?id=', -1) AS id
FROM yourTable;
对于MySQL 8+中更通用的解决方案,我们可以使用REGEXP\u SUBSTRING
:
SELECT REGEXP_REPLACE(url, '^.*?.*id=([^&]+).*$', '$1') AS id
FROM yourTable;
基于正则表达式的方法可以处理出现在查询字符串中任何位置的id
。如果每个URL都只有一个id
查询参数,那么我们可以使用子字符串索引
:
SELECT SUBSTRING_INDEX(url, '?id=', -1) AS id
FROM yourTable;
对于MySQL 8+中更通用的解决方案,我们可以使用REGEXP\u SUBSTRING
:
SELECT REGEXP_REPLACE(url, '^.*?.*id=([^&]+).*$', '$1') AS id
FROM yourTable;
基于正则表达式的方法可以处理出现在查询字符串中任何地方的id
。ant之后可能还有其他东西…@BenM Pre-MySQL 8+通常无法满足这一要求,假设id
可以出现在查询字符串中的任何地方。但是,MySQL 8+可以使用REGEXP\u REPLACE
@TimBiegeleisen我相信REGEXP\u REPLACE确实可以在数据库中进行编辑,但我不允许这样做do@milka1117运行SELECT
查询绝对不会改变表中的任何数据,不管调用哪个函数。@Aurieli我认为MySQL 8的regex API不支持lookbehinds(尽管我可能错了)。ant之后可能还有其他东西…@BenM Pre MySQL 8+通常无法满足这一要求,假设id
可以出现在查询字符串中的任何位置。但是,MySQL 8+可以使用REGEXP\u REPLACE
@TimBiegeleisen我相信REGEXP\u REPLACE确实可以在数据库中进行编辑,但我不允许这样做do@milka1117运行SELECT
查询绝对不会改变表中的任何数据,不管调用哪个函数。@Aurieli我认为MySQL 8的regex API不支持lookbehinds(尽管我可能错了)。有些任务(比如这个)最好在客户端完成。有些任务(比如这个)最好在客户端完成。