1

我的数据库中有一个带有 url 参数值的列。我想用 sql 查询将这些参数放在不同的列中。我举个例子:

我现在有一个名为参数的列,例如这个值:pOrgNum=j11000&pLanguage=nl&source=homepage

现在我想要三列:pOrgnum | pLanguage | source我的参数值。

问题是我不知道我的参数的顺序或它的长度,所以我不能使用例如substring(parameters,9,6)来提取参数pOrgnum。有人能帮助我吗?

4

2 回答 2

3

您可以使用 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é"

免责声明,我是作者。

于 2018-07-23T18:21:51.700 回答
1

我通过在搜索参数之后取字符串的右边,然后在第一个 & 之前取结果字符串的左边来实现这一点。

这处理

  • 如果参数是 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。

可能效率低下,但可以完成工作,并且在其他地方找不到简单的答案

于 2015-07-21T16:17:03.927 回答