Oracle - группировка по и разделение - PullRequest
0 голосов
/ 13 мая 2011

Мне нравится получать группу по всем 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-адресом, но не со строкой "localhost"".

Как получить все IP-адреса и порты, в т.ч.localhost (без http: // и /)?

Любая помощь будет оценена.

спасибо!

Ответы [ 3 ]

1 голос
/ 13 мая 2011

Вероятно, есть как минимум три способа найти это на макушке моей головы.

Во-первых, существует традиционный способ использования комбинации 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 функции регулярного выражения не такиеspeedy.

Как и в случае любых операций сопоставления текста, убедитесь, что ваш код соответствует всем возможным данным.

0 голосов
/ 13 мая 2011

Используйте 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://

0 голосов
/ 13 мая 2011

Вы можете использовать REGEXP_SUBSTR(), чтобы найти разные детали, а затем сгруппировать по этому

см. http://download.oracle.com/docs/cd/B13789_01/server.101/b10759/functions116.htm

построить свой REGEX с помощью

http://regexpal.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...