我在我的数据库中有一列的参数值是一个url。我想用一个sql查询把这些参数放在不同的列中。我给予一个例子:我现在有一个名为parameters的列,例如值为:pOrgNum=j11000&pLanguage=nl&source=homepage现在我需要三列:pOrgnum | pLanguage | source与我的参数值。问题是我不知道我的参数的顺序或长度,所以我不能使用例如substring(parameters,9,6)来提取参数pOrgnum。有人能帮助我吗?
pOrgNum=j11000&pLanguage=nl&source=homepage
pOrgnum | pLanguage | source
substring(parameters,9,6)
pOrgnum
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é"
免责声明,我是作者。
eyh26e7m2#
我通过在搜索参数之后取字符串的 right,然后在第一个&之前取结果字符串的 left 来实现这一点。这将处理
这会在名为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。
jutyujz03#
它的代码在mysql中工作:
SELECT substring_index(URL_FIELD,'\',-1) FROM DemoTable;
3条答案
按热度按时间bvjveswy1#
您可以使用MySQL UDF来完成此操作,它还处理参数的解码和大多数字符编码等。
https://github.com/StirlingMarketingGroup/mysql-get-url-param
示例
免责声明,我是作者。
eyh26e7m2#
我通过在搜索参数之后取字符串的 right,然后在第一个&之前取结果字符串的 left 来实现这一点。
这将处理
这会在名为url的参数中找到“utm_medium”的值:
若要使用,请寻找并以字段名称取代 url,以url参数取代utm_medium。
jutyujz03#
它的代码在mysql中工作: