誰能用SQL SERVER 2000幫忙給一個16進制轉成10進制的函數
如:我传入一串8位数的16进制数去。返回一串10进制的字符回来。
B24147FE -> 2990622718
------解决方案--------------------
- SQL code
找到一个10转16的.--创建16进制转换字符串函数 CREATE function fn_hex_to_char ( @x varbinary(100), -- binary hex value @l int -- number of bytes ) returns varchar(200) as -- Written by: Gregory A. Larsen -- Date: May 25, 2004 -- Description: This function will take any binary value and return -- the hex value as a character representation. -- In order to use this function you need to pass the -- binary hex value and the number of bytes you want to -- convert. begin declare @i varbinary(10) declare @digits char(16) set @digits = '0123456789ABCDEF' declare @s varchar(100) declare @h varchar(100) declare @j int set @j = 0 set @h = '' -- process all bytes while @j < @l begin set @j= @j + 1 -- get first character of byte set @i = substring(cast(@x as varbinary(100)),@j,1) -- get the first character set @s = cast(substring(@digits,@i%16+1,1) as char(1)) -- shift over one character set @i = @i/16 -- get the second character set @s = cast(substring(@digits,@i%16+1,1) as char(1)) + @s -- build string of hex characters set @h = @h + @s end return(@h) end go --调用 select dbo.fn_hex_to_char(convert(varbinary,100),4)
------解决方案--------------------
- SQL code
CREATE FUNCTION dbo.f_hex_dec(@s varchar(16))RETURNS bigintASBEGIN DECLARE @i int,@result bigint SELECT @i=0,@result=0,@s=RTRIM(LTRIM(UPPER(REVERSE(@s)))) WHILE @i<LEN(@s) BEGIN IF SUBSTRING(@s,@i+1,1) not between '0' and '9' and SUBSTRING(@s,@i+1,1) not between 'A' and 'F' BEGIN SELECT @result=0 break END SELECT @[email protected]+(CHARINDEX(SUBSTRING(@s,@i+1,1),'0123456789ABCDEF')-1)*POWER(16,@i),@[email protected]+1 END RETURN @resultENDGO