[英]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.