Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Nestik
Member

Откуда:
Сообщений: 22
select 
case
 when '123.001.023.002' > '123.001.023.001' then
    'yes' 
 else
     'no' 
end
from dual


Собственно сабж вроде работает и даже правильно, есть ли какие подводные камни, чтобы таким способом определять принадлежность IP к определённому диапазону?
20 июн 12, 16:35    [12747236]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51760

Nestik
Собственно сабж вроде работает и даже правильно

Только если есть выравнивание нулями. Но это мало кто делает.

Posted via ActualForum NNTP Server 1.5

20 июн 12, 16:39    [12747285]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Nestik
Member

Откуда:
Сообщений: 22
Dimitry Sibiryakov
Но это мало кто делает.

Угу, и я первый раз столкнулся с таким решением. Вот и интересно чем оно хорошо и чем плохо.
20 июн 12, 16:45    [12747339]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
miksoft
Member

Откуда:
Сообщений: 38540
Кстати, с выравниванием можно налететь. По стандарту, если перед числом стоит 0, то это число считается записанным в 8-ричной системе счисления.

Самое правильное, имхо, оперировать адресами приведенными к беззнаковому 4-байтовому числу.
20 июн 12, 16:48    [12747364]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10755
Nestik
Вот и интересно чем оно хорошо и чем плохо.
Удобно при сортировке и как поле фиксированной длины при работе с текстом в скриптах.
Но не очень понятно, зачем всё это в базе.
20 июн 12, 16:50    [12747382]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10755
miksoft
По стандарту, если перед числом стоит 0, то это число считается записанным в 8-ричной системе счисления.
С каких пор форматная строка це-рантайма стала стандартом за пределами этого самого це?
20 июн 12, 16:52    [12747401]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Nestik
Member

Откуда:
Сообщений: 22
miksoft
По стандарту, если перед числом стоит 0, то это число считается записанным в 8-ричной системе счисления.

По какому стандарту? И чем это может повлиять на сравнение строк?
20 июн 12, 16:56    [12747429]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Nestik
Member

Откуда:
Сообщений: 22
Basil A. Sidorov
Но не очень понятно, зачем всё это в базе.

Ну видимо для удобства и информативности, интереснее пялится в справочник если там норм IP. :)
20 июн 12, 16:59    [12747455]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10755
Nestik
Ну видимо для удобства и информативности, интереснее пялится в справочник если там норм IP. :)
Если (вдруг) кому-то приспичило запросить базу, то обеспечение собственного удобство - дело рук утопвопрощающего. А для всех остальных - клиент и клиентское форматирование. Тем более, что есть разные способы представления IP-адресов.
20 июн 12, 18:21    [12748107]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Basil A. Sidorov
Nestik
Ну видимо для удобства и информативности, интереснее пялится в справочник если там норм IP. :)
Если (вдруг) кому-то приспичило запросить базу, то обеспечение собственного удобство - дело рук утопвопрощающего. А для всех остальных - клиент и клиентское форматирование. Тем более, что есть разные способы представления IP-адресов.

Тут бы не забыть еще, что бывают и IPv6-адреса, размерность которых и возможные способы их записи сильно отличаются от IPv4...
20 июн 12, 18:39    [12748214]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
-2-
Member

Откуда:
Сообщений: 15330
 '123.001.023.002' > '123.001.023.001' 
а еще говорят, что размер не имеет значения.
20 июн 12, 20:33    [12748779]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
miksoft
Member

Откуда:
Сообщений: 38540
Nestik
miksoft
По стандарту, если перед числом стоит 0, то это число считается записанным в 8-ричной системе счисления.
По какому стандарту? И чем это может повлиять на сравнение строк?
Basil A. Sidorov
miksoft
По стандарту, если перед числом стоит 0, то это число считается записанным в 8-ричной системе счисления.
С каких пор форматная строка це-рантайма стала стандартом за пределами этого самого це?
RFC сходу найти не могу, unix-овый ман подойдет?
Man Page for inet_addr (Linux Section 3)
In all of the above forms, components of the dotted address can be
specified in decimal, octal (with a leading 0), or hexadecimal, with a
leading 0X).
20 июн 12, 22:20    [12749291]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Nestik
Member

Откуда:
Сообщений: 22
sphinx_mv
Тут бы не забыть еще, что бывают и IPv6-адреса, размерность которых и возможные способы их записи сильно отличаются от IPv4...

Не вижу причин, почему бы такой способ сравнения не работал бы и на IPv6 адресах.
21 июн 12, 09:08    [12750252]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Camper
Member

Откуда:
Сообщений: 174
Nestik,

Вроде как диапазон IP адресов определяется маской\классом сети. По мне так правильно было бы делать XOR с маской и сравнивать.
21 июн 12, 09:25    [12750333]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Camper
Member

Откуда:
Сообщений: 174
Вру, логическое "И".
21 июн 12, 09:27    [12750345]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Nestik
Member

Откуда:
Сообщений: 22
Camper
Вроде как диапазон IP адресов определяется маской\классом сети.

Угу, но это лишние тело движения, когда есть начальный и конечный IP диапазона.

А вообще по какому принципу oracle сравнивает строки на больше, меньше? По расположению символов в алфавитном порядке :)?
21 июн 12, 10:47    [12750997]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10755
miksoft
unix-овый ман
Нет.
А то я начну приводить ссылки на стандарт Pascal или REXX.
21 июн 12, 19:45    [12755605]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
miksoft
Member

Откуда:
Сообщений: 38540
Basil A. Sidorov
miksoft
unix-овый ман
Нет.
Нашел RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax. Там признается, что такая практика существует:
RFC 3986
Adding further to the
confusion, some implementations allow each dotted part to be
interpreted as decimal, octal, or hexadecimal, as specified in the C
language (i.e., a leading 0x or 0X implies hexadecimal; a leading 0
implies octal; otherwise, the number is interpreted as decimal).
Однако:
RFC 3986
These additional IP address formats are not allowed in the URI syntax
due to differences between platform implementations.
Т.е. пусть и не стандарт, но практика существует. И без дополнительных вводных данных в формате адреса нельзя быть уверенным.
Basil A. Sidorov
А то я начну приводить ссылки на стандарт Pascal или REXX.
А там есть что-то касательно строкового представления IP-адресов?
21 июн 12, 20:23    [12755812]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10755
miksoft
RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax. Там признается, что такая практика существует
Ну и каким боком синтаксис URI к строковому представлению "dotted decimal"?
А там есть что-то касательно строкового представления IP-адресов?
Ни в том, ни в другом нет восьмеричных чисел, а ведущие нули не имеют сакрального смысла.
22 июн 12, 16:23    [12761510]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
miksoft
Member

Откуда:
Сообщений: 38540
Basil A. Sidorov
miksoft
RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax. Там признается, что такая практика существует
Ну и каким боком синтаксис URI к строковому представлению "dotted decimal"?
Про "dotted decimal" я ничего и не говорил. А про "leading 0 implies octal" текст стандарта подтверждает, что такая практика существует.
22 июн 12, 16:40    [12761630]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10755
miksoft
такая практика существует.
Существует много разных практик, но далеко не все они стандартны.
Так понятнее?
22 июн 12, 17:14    [12761944]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
miksoft
Member

Откуда:
Сообщений: 38540
Basil A. Sidorov
miksoft
такая практика существует.
Существует много разных практик, но далеко не все они стандартны.
Так понятнее?
С тем, что это не стандарт я согласился еще вчера - 12755812
Однако, это не отменяет моего утверждения там же, что "без дополнительных вводных данных в формате адреса нельзя быть уверенным".
22 июн 12, 17:22    [12762017]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10755
miksoft
Однако, это не отменяет моего утверждения там же, что "без дополнительных вводных данных в формате адреса нельзя быть уверенным".
При сравнении строк в SQL-запросе? Я вас умоляю.
22 июн 12, 17:24    [12762030]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
miksoft
Member

Откуда:
Сообщений: 38540
Basil A. Sidorov
miksoft
Однако, это не отменяет моего утверждения там же, что "без дополнительных вводных данных в формате адреса нельзя быть уверенным".
При сравнении строк в SQL-запросе?
Да, при сравнении строк в SQL-запросе. Если два адреса записаны в разных форматах (например, в поле таблицы и пришедший извне), то сравнение может дать не тот результат, который ожидает пользователь.
Basil A. Sidorov
Я вас умоляю.
Не надо, ни к чему это :)
22 июн 12, 17:28    [12762075]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение IP адресов просто как сравнение строк. На сколько корректно?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10755
miksoft
Да, при сравнении строк в SQL-запросе.
Я вас умоляю ...
Чтобы корректно сравнивать числа как строки, строковые представления должны быть выровнены или ведущими пробелами (неудобно) или ведущими нулями (приемлимо).
Выровненное представление октета (байта) в восьмеричной системе исчисления требует пять цифр. Случаи органического поражения мозга не рассматриваем, а приведённые примеры используют группы из трёх цифр.
Вы может возразить, что "это не исключает шестнадцатиричного представления", но тогда я отмечу два момента:
1. При использовании шестнадцатиричной системы принято представлять октет строго двумя цифрам (компактнее);
2. '123.' из примера - исключает использование шестнадцатиричной системы исчисления в контексте рассматриваемой задачи.
22 июн 12, 17:39    [12762163]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить