SQL中的URL解析

SQL中的URL解析,sql,sql-server,snowflake-cloud-data-platform,Sql,Sql Server,Snowflake Cloud Data Platform,我的表中有一个不一致的url 样品看起来像 或 或 https3A%google.com/Transact?pi=9024&pai=2&ct=0&gi=1950&byo=true&ai=49&pa=289&ppt=0 对于第一个URL,结果是“blue”,但它有两个域blue和decibal。 第二个是谷歌。 第三是谷歌 我的要求是解析url并将其与包含blue、google、bing等域名的look表匹配 然而,存储在DB中的URL的易变性是一个挑战。需要编写一个能够识别匹配项的sql,如

我的表中有一个不一致的url

样品看起来像

https3A%google.com/Transact?pi=9024&pai=2&ct=0&gi=1950&byo=true&ai=49&pa=289&ppt=0

对于第一个URL,结果是“blue”,但它有两个域blue和decibal。 第二个是谷歌。 第三是谷歌

我的要求是解析url并将其与包含blue、google、bing等域名的look表匹配

然而,存储在DB中的URL的易变性是一个挑战。需要编写一个能够识别匹配项的sql,如果有两个域,只需选择第一个域。URL可以是sit,而不是标准URL


谢谢你的帮助。

你在找这样的东西吗?如果没有,我相信在解析过程中使用拆分会有所帮助,因为它会创建一个可以操作的数组。这是雪花SQL的示例,而不是SQL Server。它们都在OP中标记,因此不确定您要查找哪一个

WITH x AS (
  SELECT REPLACE(url,'3A%','//') as url
  FROM (VALUES 
        ('https://blue.decibal.com.au/Transact?pi=9024&pai=2&ct=0&gi=1950&byo=true&ai=49&pa=289&ppt=0'),
        ('https://www.google.com/Transact?pi=9024&pai=2&ct=0&gi=1950&byo=true&ai=49&pa=289&ppt=0'),
        ('https3A%google.com/Transact?pi=9024&pai=2&ct=0&gi=1950&byo=true&ai=49&pa=289&ppt=0')) as x (url)
  )
SELECT split(split_part(split_part(url,'//',2),'/',1),'.') as url_array,
       array_construct('google') as google_array,
       array_construct('decibal') as decibal_array,
       array_construct('bing') as bing_array,
       CASE WHEN arrays_overlap(url_array,google_array) THEN 'GOOGLE'
            WHEN arrays_overlap(url_array,decibal_array) THEN 'DECIBAL'
            WHEN arrays_overlap(url_array,bing_array) THEN 'BING' END as domain_match
FROM x;

你试过什么?您在哪里卡住了?选择Ls.Initial\u referer、LIR.Master\u Source、ROW\u NUMBER()(按Ls.wideales\u Lead\u ID按LIR.Master\u Source ASC划分)作为xxx.STAGING.STG\u ALL\u SALES\u LEADS内部连接WIDEBILL.REFERENCE\u DATA.LKP\u Initial\u referer LIR ON位置(较低(LIR.Initial\u referer)中的rn(LIR.Initial\u referer))>0其中ls.initial_referer如xxxsales下的“%blue%decibal%”订单基本上我希望重写我所做的一切。因为我写的那篇文章似乎很愚蠢。删除所有内容,恢复备份,再想想解决这个问题的好方法,如果你没有备份,请更清楚地解释你想要什么。(另外:尝试使用此处的格式选项,这将使您的问题更易于阅读!)看看这个
split\u part()
是一个postgres函数。在MSSQL中,您应该使用与
array\u construct()
相同的方法,但我不知道MSSQL的替代方法,我不再谈论
array\u overlap()
,我应该在我的帖子中注意到这是雪花SQL。我将编辑答案以反映问题。我忘了注意到,这同时标记了Snowflake和SQL Server。