Преобразование IP-адреса в Sybase (sybase database function ip)
Ключевые слова: sybase, database, function, ip, (найти похожие документы)
Date: Tue, 04 Mar 2003 15:19:44 +0500
From: Ilya Zvyagin <ziv@fct.ru>
Newsgroups: ftn.su.dbms.sql
Subject: Преобразование IP-адреса в Sybase
GA> Возникла проблемка - как внутри Sybase преобразовывать IP-адреса из десятиричного формата
GA> (строка вида xxx.yyy.zzz.www) в шестнадцатиричный ()?
GA> Собственно, проблема в следующем. Каким образом сплитить эту строку по точкам?
Держи этот шедевр.
declare @ip varchar(16), @octet1 char(2), @octet2 char(2), @octet3 char(2), @octet4 char(2), @i int
select @ip = '192.168.19.127'
select @ip as ip
select @ip = @ip + '.'
select @i = charindex('.',@ip)
if @i > 0
select @octet4 =
substring( '0123456789ABCDEF', ((convert( tinyint, substring(@ip,1,@i-1))&240)/16) + 1, 1 ) +
substring( '0123456789ABCDEF', convert( tinyint, substring(@ip,1,@i-1) )&15 + 1, 1 ),
@ip = substring(@ip,@i+1,255)
select @i = charindex('.',@ip)
if @i > 0
select @octet3 =
substring( '0123456789ABCDEF', ((convert( tinyint, substring(@ip,1,@i-1))&240)/16) + 1, 1 ) +
substring( '0123456789ABCDEF', convert( tinyint, substring(@ip,1,@i-1) )&15 + 1, 1 ),
@ip = substring(@ip,@i+1,255)
select @i = charindex('.',@ip)
if @i > 0
select @octet2 =
substring( '0123456789ABCDEF', ((convert( tinyint, substring(@ip,1,@i-1))&240)/16) + 1, 1 ) +
substring( '0123456789ABCDEF', convert( tinyint, substring(@ip,1,@i-1) )&15 + 1, 1 ),
@ip = substring(@ip,@i+1,255)
select @i = charindex('.',@ip)
if @i > 0
select @octet1 =
substring( '0123456789ABCDEF', ((convert( tinyint, substring(@ip,1,@i-1))&240)/16) + 1, 1 ) +
substring( '0123456789ABCDEF', convert( tinyint, substring(@ip,1,@i-1) )&15 + 1, 1 ),
@ip = substring(@ip,@i+1,255)
select @octet4 as octet4, @octet3 as octet3, @octet2 as octet2, @octet1 as octet1