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

Откуда:
Сообщений: 135
D557292D -> 213.87.41.45
как можно сделать?

select convert(int,0xD5) работает! но дело в том , что
select cast('0x'+substring('D557292D',1,2) as int)
result: Conversion failed when converting the varchar value '0xD5' to data type int
---
select cast(cast(substring(cast('D557292D' as binary(4)),1,1) as int) as varchar(3))
+ '.'+cast(cast(substring(cast('D557292D' as binary(4)),2,1) as int)as varchar(3))
+ '.'+cast(cast(substring(cast('D557292D' as binary(4)),3,1) as int)as varchar(3))
+ '.'+cast(cast(substring(cast('D557292D' as binary(4)),4,1) as int)as varchar(3)) неправильно работает!
---
DECLARE @hexstr VARCHAR(10),@exec AS NVARCHAR(50), @result INTEGER

SET @hexstr = '0x'+substring('D55728BC',1,2)

SET @exec = 'SET @result = CAST(' + @hexstr + ' AS INTEGER)'
EXEC sp_executesql @exec, N' @result INTEGER OUTPUT', @result OUTPUT

SELECT @result работает! но... Просто длиннавато помойму
какие есть идеи :)
20 июн 12, 15:28    [12746612]     Ответить | Цитировать Сообщить модератору
 Re: из hex в ip(dec)  [new]
Glory
Member

Откуда:
Сообщений: 104751
SunJun
Просто длиннавато помойму
какие есть идеи :)

Переходить на SQL2008R2
20 июн 12, 15:36    [12746711]     Ответить | Цитировать Сообщить модератору
 Re: из hex в ip(dec)  [new]
SunJun
Member

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

А как выглядит решение в SQL2008R2 ?
20 июн 12, 16:10    [12747020]     Ответить | Цитировать Сообщить модератору
 Re: из hex в ip(dec)  [new]
Glory
Member

Откуда:
Сообщений: 104751
select convert(varbinary(20),'0xD557292D', 1)
20 июн 12, 16:14    [12747053]     Ответить | Цитировать Сообщить модератору
 Re: из hex в ip(dec)  [new]
SunJun
Member

Откуда:
Сообщений: 135
эх-эх ~~ Sql2005 )
20 июн 12, 16:21    [12747119]     Ответить | Цитировать Сообщить модератору
 Re: из hex в ip(dec)  [new]
aleks2
Guest
declare @hexdigits char(17), @i int;
set @hexdigits = '0123456789ABCDEF';

declare @n table(n int primary key clustered);
declare @hex2int table(hex char(2) primary key clustered, i int);

insert @n select 0 union all select 1 union all select 2 union all select 3

set @i = 255

while @i>=0 begin
  insert @hex2int(hex, i) select SUBSTRING(@hexdigits, @i/16+1 , 1)+SUBSTRING(@hexdigits, @i%16+1 , 1), @i
  set @i=@i-1
end

----------- Все выше должно быть постоянным, естественно
declare @s char(8);
set @s='D557292D';

select REPLACE(
	cast(
			(select CAST(i as varchar) [data()] from
				(select * from @n N inner join @hex2int hi on SUBSTRING(@s, N.n*2+1, 2) = hi.hex) X
			order by X.n
			for xml path('') )
		as varchar(4000)
	)
	, ' '
	, '.'
)
20 июн 12, 16:38    [12747278]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить