我在表格中有网址数据。我想创建一个显示第二级(sld)和顶级域(tld)以及子域的视图。如何在ANSI SQL中提取它? 我使用的数据库仅支持ansi sql,并且没有很酷的功能,例如reverse。
以下是数据:
TLD = -- The top-level domain (.com, .org, .info, .us)
SLD = -- The second-level domain (twitter, yahoo, facebook, google) second part of URL
SUBDOMAIN = -- The subdomain domain (www, search.google, search.espn) first part of URL // tricky
这是我正在使用的逻辑。但我无法正确获得子域名。我想在提取TLD和SLD之后反转并获得余数,但Vertica不支持反向功能。
以下是查询和示例数据(注意:SPLIT_PART在指定的字符处拆分字符串):
select COALESCE(SPLIT_PART(URL, '.', 3), SPLIT_PART(URL, '.', 2)) as tld,
SPLIT_PART(URL, '.', 2) as sld,
SPLIT_PART(URL, '.', 1) as subdomain from URL_table
该表有2列,日期和URL 以下是示例URL:
search.mywebsearch.com (TLD = com, SLD = mywebsearch, subdomain = search)
search.earthlink.net
topix.com
main.welcomescreen.intrepid.com
ad.yieldmanager.com
google.com
news.google.com
答案 0 :(得分:0)
这是一项非常困难的事情,特别是如果您的数据很嘈杂,就像大数据一样。
你能得到http://作为前缀吗? 那些像www.sub.dom.com这样的网站呢? .TLD之后的所有内容是否已经清除?
出于这些原因,我们对尝试在SQL中实现拆分持谨慎态度。相反,我们使用了Vertica的UDTF功能,并在C ++中编写了一个分离器。我认为我们宁愿不这样做,但我们只是不相信SQL足够强大。