2011-05-13 76 views
0

我喜歡通過所有IP地址和端口獲得組。Oracle - 分組和分組

這是我選擇的腳本:

SELECT Count(p.url) nr, SUBSTR(p.url, 8, 19) as IpPort 
FROM pages p 
GROUP BY SUBSTR(p.url, 8, 19) 
Order By nr DESC 


Table data: 
url 
http://10.0.0.10:123/test/foo/bar 
http://10.0.0.10:456/tasdfest/foasdfo/baasdfr 
http://localhost:125/asdf/ 
etc. 

這個腳本可與IP addresse但不能與字符串 「localhost」。

如何獲取所有IP地址和端口,包括:本地主機(沒有http://和/)?

任何幫助,將不勝感激。

謝謝!

回答

1

有可能找到這把我的頭頂部至少在三個方面。

首先,存在使用INSTR的組合和SUBSTR

substr(url, 8, instr(url, '/',1,3)-8) as ipport

然後有一對夫婦的使用正則表達式函數不同的方式的傳統方式。這些示例匹配不是斜槓字符/的所有內容,因此如果端口號後面沒有斜槓,則可能會出現問題。

regexp_substr(url, '([^/]+)',8)

regexp_replace(url, 'http://([^/]+)/.*', '\1')

我想我可能更喜歡regexp_substr版本,但如果你的數據量都很高,它可能會付出堅持使用SUBSTR/INSTR的選擇,因爲在我的Oracle數據庫環境下的經驗10g的正則表達式功能並不那麼快。

與任何文本匹配操作一樣,請確保您的代碼與所有可能的數據匹配。

0

使用INSTR的幫助下建立自己的正則表達式()找到第三個斜槓的索引:

SELECT Count(p.url) nr, SUBSTR(p.url, 8, instr(p.url, '/', 8)) as IpPort 
FROM pages p 
GROUP BY SUBSTR(p.url, 8, 19) 
Order By nr DES 

只有工作,如果他們都開始http://