sql中的url解析

r6l8ljro  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(914)

我的表中有一个不一致的url。
样本看起来像
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
对于第一个url,“blue”是结果,但它有两个域blue和decibal。第二个是谷歌。第三是谷歌。
我的要求是解析的网址,并匹配与域名,其中包括蓝色,谷歌,必应等看表。
然而,存储在db中的url的易变性是一个挑战。需要编写一个sql,它可以识别匹配,如果有两个域,只需选择第一个域。url可以是sit,而不是标准的。
谢谢你的帮助。

sigwle7e

sigwle7e1#

你在找这样的东西吗?如果没有,我相信在解析过程中使用拆分会有所帮助,因为它会创建一个可以操纵的数组。这是snowflake sql的一个例子,而不是sqlserver。他们都在行动中的标签,所以不知道你在找哪一个。

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;

相关问题