2011-05-13 63 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://