读书人

能用SQL SERVER 2000忙一

发布时间: 2012-01-13 22:43:30 作者: rapoo

能用SQL SERVER 2000忙一16制成10制的函
能用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 @result=@result+(CHARINDEX(SUBSTRING(@s,@i+1,1),'0123456789ABCDEF')-1)*POWER(16,@i),@i=@i+1  END  RETURN @resultENDGO 

读书人网 >SQL Server

热点推荐