Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Найти IP  [new]
Demer
Member

Откуда:
Сообщений: 82
Такая задача:
Есть таблица ip-адресов:

id (int, not null)
City (nvarchar(150), null)
IP_From (varchar(50), null)
ip_To (varchar(50), null)

    id |     City     |      IP_From      |       ip_To
-----------------------------------------------------------
1 | Москва | 95.167.68.8 | 95.167.68.15
2 | Москва | 95.167.68.16 | 95.167.68.31
3 | Москва | 95.167.71.0 | 95.167.71.3
4 | Питер | 84.204.167.140 | 84.204.167.143
5 | Питер | 77.223.96.0 | 77.223.102.127

Нужно определить какой город находится на IP = '95.167.68.25'

Вот кто может помочь? =)
31 авг 11, 12:35    [11205275]     Ответить | Цитировать Сообщить модератору
 Re: Найти IP  [new]
1d0
Member

Откуда: инфа100%
Сообщений: 2521
between?
31 авг 11, 12:43    [11205339]     Ответить | Цитировать Сообщить модератору
 Re: Найти IP  [new]
iljy
Member

Откуда:
Сообщений: 8711
Demer
Такая задача:
Есть таблица ip-адресов:

id (int, not null)
City (nvarchar(150), null)
IP_From (varchar(50), null)
ip_To (varchar(50), null)

    id |     City     |      IP_From      |       ip_To
-----------------------------------------------------------
1 | Москва | 95.167.68.8 | 95.167.68.15
2 | Москва | 95.167.68.16 | 95.167.68.31
3 | Москва | 95.167.71.0 | 95.167.71.3
4 | Питер | 84.204.167.140 | 84.204.167.143
5 | Питер | 77.223.96.0 | 77.223.102.127

Нужно определить какой город находится на IP = '95.167.68.25'

Вот кто может помочь? =)

Хранить ипишники надо не в строках, а в интах или бинари(4), тогда проблема решается тривиально.
31 авг 11, 12:57    [11205445]     Ответить | Цитировать Сообщить модератору
 Re: Найти IP  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Demer,

ip в таком виде напрочь исключают использование индексов.
Разве что вычисляемое поле + индекс по нему
31 авг 11, 13:08    [11205536]     Ответить | Цитировать Сообщить модератору
 Re: Найти IP  [new]
aleks2
Guest
iljy
Хранить ипишники надо не в строках, а в интах или бинари(4), тогда проблема решается тривиально.

Можна и в строках, тока фиксированной ширины
095.167.068.008
31 авг 11, 16:26    [11207401]     Ответить | Цитировать Сообщить модератору
 Re: Найти IP  [new]
aleks2
Guest
Хотя правильнее, преобразовать к Int.
CREATE function [dbo].[IP2Int]
(@ip varchar(15))
returns bigint
as
begin
  return cast(PARSENAME(@ip , 1) as tinyint)
	+cast(PARSENAME(@ip , 2) as tinyint)*cast(256 as bigint)
	+cast(PARSENAME(@ip , 3) as tinyint)*cast(65536 as bigint)
	+cast(PARSENAME(@ip , 4) as tinyint)*cast(16777216 as bigint)
end
31 авг 11, 16:29    [11207431]     Ответить | Цитировать Сообщить модератору
 Re: Найти IP  [new]
Demer
Member

Откуда:
Сообщений: 82
Всем большое спасибо =)

Сделал так:
1) преобразовал все ip в 16-систему
95.167.68.15 = 5f a7 44 0f
2) полученное преобразовал обратно в 10
5f a7 44 0f = 1604797455

и стало проще искать без заморочек ))
31 авг 11, 17:00    [11207744]     Ответить | Цитировать Сообщить модератору
 Re: Найти IP  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
В простейшем случае можно так. (c) iap

declare @t table (ip varchar(15))
insert @t
 select '192.168.63.100' union all select '192.168.63.120' union all select '192.168.63.200' union all select '192.168.63.201'

select * from @t
where ip like '192.168.63.%'
and cast(parsename(ip,1) as tinyint) between 120 and 200
31 авг 11, 17:22    [11207886]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить