我想在mysql中提取url的参数

2nc8po8w  于 2022-11-21  发布在  Mysql
关注(0)|答案(3)|浏览(171)

我在我的数据库中有一列的参数值是一个url。我想用一个sql查询把这些参数放在不同的列中。我给予一个例子:
我现在有一个名为parameters的列,例如值为:pOrgNum=j11000&pLanguage=nl&source=homepage
现在我需要三列:pOrgnum | pLanguage | source与我的参数值。
问题是我不知道我的参数的顺序或长度,所以我不能使用例如substring(parameters,9,6)来提取参数pOrgnum。有人能帮助我吗?

bvjveswy

bvjveswy1#

您可以使用MySQL UDF来完成此操作,它还处理参数的解码和大多数字符编码等。
https://github.com/StirlingMarketingGroup/mysql-get-url-param
示例

select`get_url_param`('https://www.youtube.com/watch?v=KDszSrddGBc','v');
-- "KDszSrddGBc"

select`get_url_param`('watch?v=KDszSrddGBc','v');
-- "KDszSrddGBc"

select`get_url_param`('watch?v=KDszSrddGBc','x');
-- null

select`get_url_param`('https://www.google.com/search?q=cgo+uint32+to+pointer&rlz=1C1CHBF_enUS767US767&oq=cgo+uint32+to+pointer&aqs=chrome..69i57.12106j0j7&sourceid=chrome&ie=UTF-8','q');
-- "cgo uint32 to pointer"

select`get_url_param`('/search?q=Na%C3%AFvet%C3%A9&oq=Na%C3%AFvet%C3%A9','q');
-- "Naïveté"

免责声明,我是作者。

eyh26e7m

eyh26e7m2#

我通过在搜索参数之后取字符串的 right,然后在第一个&之前取结果字符串的 left 来实现这一点。
这将处理

  • 如果参数是url中的最后一个参数(因此后面没有“&”)
  • 如果参数不存在(传回空白)
  • 搜索字符串的不同长度(假设您在所有位置替换“utm_medium”)

这会在名为url的参数中找到“utm_medium”的值:

IF(locate("utm_medium", url)=0, '', LEFT(RIGHT(url,length(url)-locate("utm_medium",url)-length("utm_medium")),IF(locate("&",RIGHT(url,length(url)-locate("utm_medium",url)-length("utm_medium")))=0,length(RIGHT(url,length(url)-locate("utm_medium",url)-length("utm_medium")+1)),locate("&",RIGHT(url,length(url)-locate("utm_medium",url)-length("utm_medium"))))-1)) utm_medium

若要使用,请寻找并以字段名称取代 url,以url参数取代utm_medium。

  • 可能效率不高,但能完成工作,在其他地方找不到简单得答案 *
jutyujz0

jutyujz03#

它的代码在mysql中工作:

SELECT substring_index(URL_FIELD,'\',-1) FROM DemoTable;

相关问题