十六进制转十进制
2007-03-31 01:24
169 查看
CREATE FUNCTION FN_HEXTOBINARY (@HEX VARCHAR(8))
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @BASE TINYINT
DECLARE @string VARCHAR(255)
DECLARE @return VARCHAR(255)
DECLARE @div INT
DECLARE @char CHAR(1)
DECLARE @pos INT
DECLARE @digit INT
DECLARE @result varchar(16)
SELECT @string= '0123456789ABCDEF'
SELECT @pos = 1
SELECT @result= ''
SELECT @return= ''
SELECT @base=2
WHILE (@pos<>len(@hex)+1)
BEGIN
IF substring(@hex,@pos,1) NOT in ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F')
BEGIN
RETURN NULL
END
SELECT @digit=charindex(substring(@hex,@pos,1),@string)-1
WHILE (@digit<>0)
BEGIN
SELECT @div=@digit/@base
SELECT @result=convert(varchar(1),(@digit % @base)) + @result
SELECT @digit=@div
END
SELECT @return=@return + CASE WHEN len(@result)<4 THEN replace(space(4-len(@result)) + @result,' ','0') ELSE @result END
SELECT @result=''
SELECT @pos=@pos+1
END
RETURN @return
END
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @BASE TINYINT
DECLARE @string VARCHAR(255)
DECLARE @return VARCHAR(255)
DECLARE @div INT
DECLARE @char CHAR(1)
DECLARE @pos INT
DECLARE @digit INT
DECLARE @result varchar(16)
SELECT @string= '0123456789ABCDEF'
SELECT @pos = 1
SELECT @result= ''
SELECT @return= ''
SELECT @base=2
WHILE (@pos<>len(@hex)+1)
BEGIN
IF substring(@hex,@pos,1) NOT in ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F')
BEGIN
RETURN NULL
END
SELECT @digit=charindex(substring(@hex,@pos,1),@string)-1
WHILE (@digit<>0)
BEGIN
SELECT @div=@digit/@base
SELECT @result=convert(varchar(1),(@digit % @base)) + @result
SELECT @digit=@div
END
SELECT @return=@return + CASE WHEN len(@result)<4 THEN replace(space(4-len(@result)) + @result,' ','0') ELSE @result END
SELECT @result=''
SELECT @pos=@pos+1
END
RETURN @return
END