Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在查询中从url提取id?_Mysql_Regex - Fatal编程技术网

Mysql 如何在查询中从url提取id?

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之前在查询中

我有一个表,其中一列包含许多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之前在查询中准备尽可能多的数据。我知道如何在MySQL
where
子句中使用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(尽管我可能错了)。有些任务(比如这个)最好在客户端完成。有些任务(比如这个)最好在客户端完成。