CREATE function [dbo].[ip6ColTohex](@ipaddr_str char(64) )
RETURNS binary(16)
AS
BEGIN
declare @erg_str varchar(64);
declare @erg_str1 varchar(64);
declare @pos integer;
declare @found integer;
declare @len integer;
declare @len_part integer;
declare @partcount integer;
declare @found2colons integer;
declare @ipaddr_part varchar(64);
declare @ipaddr_part2 varchar(64);
if (@ipaddr_str = NULL)
begin
return NULL;
end
set @len=len(@ipaddr_str);
set @pos=1;
set @erg_str='';
set @erg_str1='';
set @partcount=0;
set @found2colons=0;
select @found=charindex('.',@ipaddr_str);
if (@found > 0 )
begin
return NULL;
end
select @found=charindex(':',@ipaddr_str);
if (@found = 0 )
begin
return NULL;
end
while (@pos < @len + 1 )
begin
select @found = charindex( ':', @ipaddr_str, @pos )
if @found = 0
select @found=@len + 1;
select @ipaddr_part=rtrim(ltrim(substring(@ipaddr_str,@pos,@found-@pos)));
select @len_part=len(@ipaddr_part);
if @len_part != 0
begin
select @ipaddr_part2=stuff('0000',4-@len_part+1,@len_part,@ipaddr_part);
select @erg_str=@erg_str ++ @ipaddr_part2;
set @partcount=@partcount + 1;
end
else
begin
select @erg_str1=@erg_str;
select @erg_str='';
set @found2colons=@found2colons+1;
end
select @pos=@found + 1;
end
if @found2colons > 1
return NULL;
if @found2colons = 1
select @erg_str=@erg_str1 ++ replicate('0000',8-@partcount) ++ @erg_str;
if len(@erg_str) = 32
return dbo.unhex (@erg_str);
return NULL;
END
GO
GRANT EXECUTE ON [dbo].[ip6ColTohex] TO [ca_itrm_group]
GRANT EXECUTE ON [dbo].[ip6ColTohex] TO [ca_itrm_group_ams]
GO