Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
=Сергей= Member Откуда: Сообщений: 334 |
Есть таблица IP-адресов (integer), как правильно распарсить байты? На C# я бы сделал через сдвиги, а тут как? |
13 май 14, 12:14 [16009324] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
Делением на степени 256.
Сообщение было отредактировано: 13 май 14, 12:18 |
13 май 14, 12:18 [16009365] Ответить | Цитировать Сообщить модератору |
=Сергей= Member Откуда: Сообщений: 334 |
Это извращение, а как иначе?declare @ip integer set @ip = 1475729424 declare @a integer declare @b integer declare @c integer declare @d integer set @a = @ip/256/256/256 set @b = (@ip - @a*256*256*256)/256/256 set @c = (@ip - @a*256*256*256 - @b*256*256)/256 set @d = (@ip - @a*256*256*256 - @b*256*256 - @c*256) select @a,@b,@c,@d |
13 май 14, 12:19 [16009382] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
Или даже так покороче:declare @ip int = 2130706433 declare @ip_bin binary (4) = @ip select cast (substring ( @ip_bin, 1, 1 ) as int) , cast (substring ( @ip_bin, 2, 1 ) as int) , cast (substring ( @ip_bin, 3, 1 ) as int) , cast (substring ( @ip_bin, 4, 1 ) as int) |
13 май 14, 12:22 [16009393] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
(IP&0x000000FF)/POWER(2,0*8) (IP&0x0000FF00)/POWER(2,1*8) (IP&0x00FF0000)/POWER(2,2*8) (IP&0xFF000000)/POWER(2,3*8) |
13 май 14, 12:26 [16009430] Ответить | Цитировать Сообщить модератору |
user89 Member Откуда: Сообщений: 2083 |
iap, наоборот... declare @ip_int bigint = 3232251748 select (@ip_int&0xFF000000)/power(2,3*8), (@ip_int&0x00FF0000)/power(2,2*8), (@ip_int&0x0000FF00)/power(2,1*8), (@ip_int&0x000000FF)/power(2,0*8) -- Из строки в bigint declare @ip_str varchar(15) = '192.168.63.100' select cast(parsename(@ip_str , 1) as tinyint) + cast(parsename(@ip_str, 2) as tinyint)*cast(256 as bigint) + cast(parsename(@ip_str, 3) as tinyint)*cast(65536 as bigint) + cast(parsename(@ip_str, 4) as tinyint)*cast(16777216 as bigint) |
13 май 14, 12:50 [16009579] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9632 |
declare @ip_int bigint = 3232251748; select cast(substring(cast(@ip_int as binary(4)), 1, 1) as tinyint), cast(substring(cast(@ip_int as binary(4)), 2, 1) as tinyint), cast(substring(cast(@ip_int as binary(4)), 3, 1) as tinyint), cast(substring(cast(@ip_int as binary(4)), 4, 1) as tinyint); |
13 май 14, 13:29 [16009835] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |