簡體   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