Очистка IPv4-адресов с точками и квадратами в SQL - PullRequest
0 голосов
/ 25 марта 2010

Дана таблица, содержащая четырехточечные IPv4-адреса, сохраненные как VARCHAR(15), например:

     ipv4
--------------
 172.16.1.100
 172.16.50.5
 172.30.29.28

Какой удобный способ SELECT всех "ipv4" полей с очищенными последними двумя октетами так, чтобы вышеприведенное стало:

    ipv4
------------
 172.16.x.y
 172.16.x.y
 172.30.x.y

Целевая СУБД - это postgresql 8.4, но чем более переносима, тем лучше!

Спасибо.

ОБНОВЛЕНИЕ: в то время как я оцениваю (и делаю upvote) гладкие ответы INET / CIDR, я хочу произвести вывод string с заменой нечисловых символов для последних двух октетов. (И, опять же, чем портативнее, тем лучше!)

Ответы [ 3 ]

3 голосов
/ 25 марта 2010

Если вы используете тип inet Postgres, то вы можете сделать это с помощью операторов inet, например. <<= означает «содержится внутри». Я подозреваю, что что-то вроде следующего сделает то, что вам нужно:

select my_ipaddress & inet '255.255.0.0' from my_ip_table;

Справочник по эксплуатации: http://www.postgresql.org/docs/8.4/static/functions-net.html

3 голосов
/ 25 марта 2010

Для postgres:

select regexp_replace('172.16.1.100', E'(.\\d+){2}$', '.x.y');
1 голос
/ 25 марта 2010

Обычным является преобразование типа столбца в inet / cidr

EDIT: С этим собственным типом данных есть довольно много специфических функций, которые выполняют намного лучше, чем любая обработка строк

...