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

解决方案 »

  1.   

    找到一个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)