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

Откуда:
Сообщений: 1574
нужно написат скрипт...есть данные
rp ip
50501 192.135.134.0/24
50501 192.135.13.0/24
50501 192.135.152.0/24
23205 194.24.156.96/27
23201 194.48.139.160/28
23201 194.48.139.192/27

нужно сделать так, что если /24 то протягиваем от 0 до 24 и т.д.
короче должно получиться так
50501 192.135.134.0
50501 192.135.134.1
50501 192.135.134.2
...
50501 192.135.134.24

50501 192.135.13.0
50501 192.135.13.1
...
50501 192.135.13.24

23205 194.24.156.96
23205 194.24.156.97
...
23205 194.24.156.122
12 июн 13, 09:27    [14423866]     Ответить | Цитировать Сообщить модератору
 Re: скрипт а  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
dimakz
нужно сделать так, что если /24 то протягиваем от 0 до 24 и т.д.
Странно, мне всегда казалось, что /24 означает диапазон от .0 до .255 в последнем октете.
12 июн 13, 09:45    [14423884]     Ответить | Цитировать Сообщить модератору
 Re: скрипт а  [new]
dimakz
Member

Откуда:
Сообщений: 1574
а тогда /26 /27 /28 что обозначает
12 июн 13, 09:50    [14423891]     Ответить | Цитировать Сообщить модератору
 Re: скрипт а  [new]
Ennor Tiegael
Member

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

Маска подсети.
12 июн 13, 09:58    [14423905]     Ответить | Цитировать Сообщить модератору
 Re: скрипт а  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
dimakz
а тогда /26 /27 /28 что обозначает
dimakz
а тогда /26 /27 /28 что обозначает
Принципиально - то же самое: количество установленных бит в маске адреса (32-х-разрядное беззнаковое целое)
Начинать просвещаться тут - IPv4
12 июн 13, 10:02    [14423915]     Ответить | Цитировать Сообщить модератору
 Re: скрипт а  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Не знаю какая у вас цель, но вот тут была эпическая тема на функцию проверки принадлежности адреса маске.
Там 2 подхода поиска соответствия (RangeScan vs SubSeek).
12 июн 13, 10:31    [14423973]     Ответить | Цитировать Сообщить модератору
 Re: скрипт а  [new]
гавнакодер начинающий
Guest
мне плевать что автор сам не знает что хочет, учусь пейсать селекты букваме. быдлокодЪ в лопЪ

[sql]
;with
l0(id) as (select 1 union all select 1),
l1(id) as (select 1 from l0 t1, l0 t2),
l2(id) as (select 1 from l1 t1, l1 t2),
l3(id) as (select 1 from l2 t1, l2 t2),
l4(rn) as (select row_number() over(order by (select 1)) from l3),
data(rp, ip) as
(
select 50501, '192.135.134.0/24' union all
select 50501, '192.135.13.0/24' union all
select 50501, '192.135.152.0/24' union all
select 23205, '194.24.156.96/27' union all
select 23201, '194.48.139.160/28' union all
select 23201, '194.48.139.192/27'
)
select
T1.rp,
T1.ip,

case
when ltrim(rtrim(substring(t1.ip, charindex('/', t1.ip) + 1, 2))) = '24' then left(t1.ip, charindex('.', t1.ip, charindex('.', t1.ip, charindex('.', t1.ip) + 1) + 1)) + cast(t2.rn - 1 as varchar)
else left(t1.ip, charindex('/', t1.ip) - 1)
end

from
data t1
outer apply
(
select rn from l4 where rn - 1 <= 24 and ltrim(rtrim(substring(t1.ip, charindex('/', t1.ip) + 1, 2))) = '24'
) t2
[/sql]
12 июн 13, 13:50    [14424514]     Ответить | Цитировать Сообщить модератору
 Re: скрипт а  [new]
гавнокадер фиксящий
Guest
мне плевать что автор сам не знает что хочет, учусь пейсать селекты букваме. быдлокодЪ в лопЪ

[sql]
;with
l0(id) as (select 1 union all select 1),
l1(id) as (select 1 from l0 t1, l0 t2),
l2(id) as (select 1 from l1 t1, l1 t2),
l3(id) as (select 1 from l2 t1, l2 t2),
l4(rn) as (select row_number() over(order by (select 1)) from l3),
data(rp, ip) as
(
	select 50501, '192.135.134.0/24' union all
	select 50501, '192.135.13.0/24' union all
	select 50501, '192.135.152.0/24' union all
	select 23205, '194.24.156.96/27' union all
	select 23201, '194.48.139.160/28' union all
	select 23201, '194.48.139.192/27'
)
select
	T1.rp,
	T1.ip,
	
	case
		when ltrim(rtrim(substring(t1.ip, charindex('/', t1.ip) + 1, 2))) = '24' then left(t1.ip, charindex('.', t1.ip, charindex('.', t1.ip, charindex('.', t1.ip) + 1) + 1)) + cast(t2.rn - 1 as varchar)
		else left(t1.ip, charindex('/', t1.ip) - 1)
	end

from
	data t1
		outer apply
	(
		select rn from l4 where rn - 1 <= 24 and ltrim(rtrim(substring(t1.ip, charindex('/', t1.ip) + 1, 2))) = '24'
	) t2
[/sql]
12 июн 13, 13:51    [14424519]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить