如何从查询中的网址提取ID?

时间:2019-07-09 10:21:39

标签: mysql regex

我有一个表,其中的一列包含许多这样的网址:

https://myshop.com/lv/buitine-technika-elektronika/virtuves-iranga/virduliai/virdulys-elektrinis-virdulys-forme-fkg-147?id=22031685

我想从网址中提取 ID,但是我不知道该怎么做。稍后,我可以使用regex在Python中轻松做到这一点:

\?id\=(\d+)

但是如果可能的话,我想在使用python之前准备好尽可能多的数据。我知道如何在MySQL where子句中使用正则表达式,但不知道如何在其他地方使用它。有办法吗?

ID长度可以不同,并且此后可能还有其他内容...

1 个答案:

答案 0 :(得分:2)

如果每个URL仅具有一个id查询参数,那么我们可以使用SUBSTRING_INDEX

SELECT SUBSTRING_INDEX(url, '?id=', -1) AS id
FROM yourTable;

Demo

对于MySQL 8+中更通用的解决方案,我们可以使用REGEXP_SUBSTRING

SELECT REGEXP_REPLACE(url, '^.*?.*id=([^&]+).*$', '$1') AS id
FROM yourTable;

Demo

基于正则表达式的方法可以处理id出现在查询字符串中任何地方的情况。