在SQL中提取字符串的一部分

时间:2013-05-06 17:55:03

标签: sql vertica

我在表格中有网址数据。我想创建一个显示第二级(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

1 个答案:

答案 0 :(得分:0)

这是一项非常困难的事情,特别是如果您的数据很嘈杂,就像大数据一样。

你能得到http://作为前缀吗? 那些像www.sub.dom.com这样的网站呢? .TLD之后的所有内容是否已经清除?

出于这些原因,我们对尝试在SQL中实现拆分持谨慎态度。相反,我们使用了Vertica的UDTF功能,并在C ++中编写了一个分离器。我认为我们宁愿不这样做,但我们只是不相信SQL足够强大。