日期:2014-05-18  浏览次数:20539 次

誰能用SQL SERVER 2000幫忙給一個16進制轉成10進制的函數
誰能用SQL SERVER 2000幫忙給一個16進制轉成10進制的函數
如:我传入一串8位数的16进制数去。返回一串10进制的字符回来。
  B24147FE -> 2990622718

------解决方案--------------------
SQL code
CREATE FUNCTION dbo.f_hex_dec(@s varchar(16))
RETURNS bigint
AS
BEGIN
  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 @result=@result+(CHARINDEX(SUBSTRING(@s,@i+1,1),'0123456789ABCDEF')-1)*POWER(16,@i),@i=@i+1
  END
  RETURN @result
END
GO

------解决方案--------------------
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)