2016-12-08 45 views
2

我在構建Netezza查詢的輸出時遇到了問題。我正在處理網絡數據,需要能夠統計正在接收流量的不同網址。問題是大多數行包含需要在計數之前剝離的URL參數。Netezza SQL查詢中的字符串運算符

這是我的網址的樣子:

  • www.site.com/page?utm_source=xxx & utm_campaign = YYY
  • www.site.com/another?cmp_code=zzz & cmp_vendor = AAA
  • www.site.com/page?cmp_code=nnn & cmp_vendor = BBB
  • www.site.com/another
  • www.site.com/something

我想什麼回是這樣的:

  • www.site.com/page
  • www.site.com/another
  • www.site.com/page
  • www.site.com/another
  • www.site.com/something

我的查詢是低。它沒有錯誤地運行,但它沒有產生我想要的結果。

SELECT UID, TIMESTAMP, SUBSTR(FULL_URL, 1, INSTR(FULL_URL, '?', -1) AS MY_URL 
FROM MY.TABLE 
LIMIT 100; 

這是結果

  • www.site.com/page
  • www.site.com/another
  • www.site.com/page
  • NULL
  • NULL

你可以在這裏看到,如果我的URL包含一個問號,我會得到我想要的確切結果。如果它不包含URL參數,那麼它什麼也不返回。

我也嘗試了一種正則表達式的方法,但是這是目前給我的一個Count field incorrect錯誤。

SELECT UID, TIMESTAMP, REGEXP_REPACE(FULL_URL, (\.\+)(\/?)(\.\*), $1) AS MY_URL 
FROM MY.TABLE 
LIMIT 100; 

我還是Netezza的新手,我沒有看到我需要完成的邏輯或操作符。任何人都可以將我指向正確的方向嗎?

+1

嘗試'REGEXP_EXTRACT(full_url, '^ [^] +')' –

+0

這不正是我所需要的。感謝您的協助! – Lenwood

回答

2

這應該工作:

create temp table myTable (Full_URL varchar(5000)); 
insert into myTable values('www.site.com/page?utm_source=xxx&utm_campaign=yyy'); 
insert into myTable values('www.site.com/another?cmp_code=zzz&cmp_vendor=aaa'); 
insert into myTable values('www.site.com/page?cmp_code=nnn&cmp_vendor=bbb'); 
insert into myTable values('www.site.com/another'); 
insert into myTable values('www.site.com/something'); 

select regexp_replace(Full_URL,'\?.*','') 
from myTable