我的数据库中有一个带有 url 参数值的列。我想用 sql 查询将这些参数放在不同的列中。我举个例子:
我现在有一个名为参数的列,例如这个值:pOrgNum=j11000&pLanguage=nl&source=homepage
现在我想要三列:pOrgnum | pLanguage | source
我的参数值。
问题是我不知道我的参数的顺序或它的长度,所以我不能使用例如substring(parameters,9,6)
来提取参数pOrgnum
。有人能帮助我吗?
我的数据库中有一个带有 url 参数值的列。我想用 sql 查询将这些参数放在不同的列中。我举个例子:
我现在有一个名为参数的列,例如这个值:pOrgNum=j11000&pLanguage=nl&source=homepage
现在我想要三列:pOrgnum | pLanguage | source
我的参数值。
问题是我不知道我的参数的顺序或它的长度,所以我不能使用例如substring(parameters,9,6)
来提取参数pOrgnum
。有人能帮助我吗?
您可以使用 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é"
免责声明,我是作者。
我通过在搜索参数之后取字符串的右边,然后在第一个 & 之前取结果字符串的左边来实现这一点。
这处理
这会在名为 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。
可能效率低下,但可以完成工作,并且在其他地方找不到简单的答案