繁体   English   中英

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

[英]Extracting parts of a string in SQL

我在表格中有网址数据。 我想创建一个显示第二级(sld)和顶级域(tld)以及子域的视图。 如何在ANSI SQL中提取此内容? 我正在使用的数据库仅支持ansi sql,并且没有诸如反向之类的出色功能。

数据如下:

  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

这确实是一件很难做的事情,尤其是在您的数据嘈杂的情况下(大数据就是这种情况)。

您能否以http://作为前缀? 像www.sub.dom.com这样的网站呢? .TLD之后的所有内容都已经清除了吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM