我喜欢通过所有IP地址和端口获得一个组。
这是我的选择脚本:
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地址和端口。 localhost(没有http://和/)?
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分: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下的经验,正则表达式函数并不是那么快。
与任何文本匹配操作一样,请确保您的代码与所有可能的数据匹配。
答案 1 :(得分:0)
您可以使用REGEXP_SUBSTR()
查找不同的部分,然后按此
请参阅:http://download.oracle.com/docs/cd/B13789_01/server.101/b10759/functions116.htm
使用
的帮助构建您的REGEX答案 2 :(得分: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://