Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
Alex M.
Member

Откуда: Москва
Сообщений: 15
Сабж, собственно.
Кроме использования громоздких конструкций с циклами, и CHARINDEX, есть какие-то варианты поизящнее?
8 мар 16, 21:12    [18908908]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex M.
Кроме использования громоздких конструкций с циклами, и CHARINDEX, есть какие-то варианты поизящнее?

Создать список всех возможных адресов заранее
8 мар 16, 21:17    [18908923]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
Alex M.
Member

Откуда: Москва
Сообщений: 15
Так адреса могут быть из любого диапазона, не только 192.168.% . Это какого размера таблица получится?
8 мар 16, 21:31    [18908978]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex M.
Так адреса могут быть из любого диапазона, не только 192.168.% . Это какого размера таблица получится?

А какая разница, если я задам [012][012345][012345].[012][012345][012345].[012][012345][012345].[012][012345][012345] ?
8 мар 16, 21:39    [18909021]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
Alex M.
Member

Откуда: Москва
Сообщений: 15
Я, наверное, плохо объяснил. Мне надо диапазоны, хранимые в виде [012][012345][012345].[012][012345][012345].[012][012345][012345].[012][012345][012345] представить построчно, по одному IP адресу в строке.
8 мар 16, 22:38    [18909199]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex M.
Мне надо диапазоны, хранимые в виде [012][012345][012345].[012][012345][012345].[012][012345][012345].[012][012345][012345] представить построчно, по одному IP адресу в строке.

Ну так и какого размера получится конечная таблица для [012][012345][012345].[012][012345][012345].[012][012345][012345].[012][012345][012345] ?
8 мар 16, 22:41    [18909208]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
Alex M.
Member

Откуда: Москва
Сообщений: 15
Varchar(15) в 255 в четвертой степени раз. И для моей задачи это многовато.
8 мар 16, 22:58    [18909234]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex M.
И для моей задачи это многовато.

Значит задача нуждается в уточнении/изменении
8 мар 16, 23:03    [18909240]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
declare @s varchar(100) = '192.168.[02].1[23][0-9]';

declare @n table (n varchar(3));

with s as
(
 select 0 as n
 union all
 select n + 1 from s where n < 255
)
insert into @n
select
 cast(n - 1 as varchar(3))
from
 s
option
 (maxrecursion 0);

select
 n1.n + '.' + n2.n + '.' + n3.n + '.' + n4.n
from
 (select replace(replace(@s, '[', '('), ']', ')')) a(ip) cross apply
 (
  select
   replace(replace(parsename(a.ip, 4), '(', '['), ')', ']'),
   replace(replace(parsename(a.ip, 3), '(', '['), ')', ']'),
   replace(replace(parsename(a.ip, 2), '(', '['), ')', ']'),
   replace(replace(parsename(a.ip, 1), '(', '['), ')', ']')
 ) b(p1, p2, p3, p4) join
 @n n1 on n1.n like b.p1 join
 @n n2 on n2.n like b.p2 join
 @n n3 on n3.n like b.p3 join
 @n n4 on n4.n like b.p4;
В реальном решении замените @n на постоянную таблицу.
8 мар 16, 23:53    [18909341]     Ответить | Цитировать Сообщить модератору
 Re: Преобразовать IP из вида 192.168.[02].1[23][0-9] в список формата ххх.ххх.ххх.ххх  [new]
Alex M.
Member

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

Спасибо огромное.
9 мар 16, 09:35    [18909738]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить