本文收藏整理在SQL中使用sql实现进制转换,如:十进制转为十六进制、十六进制转为十进制、整数转换成二进制、数字转换成16进制的各种方法,一一介绍如下:
第一、十进制转为十六进制

DECLARE
@binary varbinary(255),
@str_return varchar(255)

SELECT
@binary = CONVERT(varbinary(255),29327795562177529)

EXEC master.dbo.xp_varbintohexstr @binary, @str_return OUTPUT
SELECT
结果 = reverse(@str_return)

/*
结果
__________________________
008613974878369F10000011x0
*/
第二、十六进制转为十进制

CREATE FUNCTION dbo.f_hex_dec(@s varchar(16))
RETURNS bigint
AS
BEGIN
--作者:pbsql
--参数不得含'0'~'9'、'a'~'f'、'A'~'F'之外的任意字符(首尾空格除外),否则返回0
  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

第三、整数转换成二进制的函数

create function f_int2bin(@i int)
returns varchar(1000)
as
begin
    declare @s varchar(1000)
    set @s=''
    while @i>0
        select @s=cast(@i%2 as varchar) @s
            ,@i=@i/2
    return(@s)
end
go

--调用
select dbo.f_int2bin(200)
第四、数字转换成16进制

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_int2hex]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_int2hex]
GO

/*--数字转换成16进制

--邹建 2004.04(引用请保留此信息)--*/

/*--调用示例

    --调用
    select dbo.f_int2hex(123)
--*/
create function f_int2hex(@num int)
returns varchar(100)
as
begin
    declare @re varchar(100)
    set @re=''
    while @num>0
        select @re=substring('0123456789ABCDEF',@num%16 1,1) @re
            ,@num=@num/16
    return(@re)
end
go

posted on 2010-01-19 23:51  opper  阅读(3928)  评论(0编辑  收藏  举报

青丝网

脱发治疗

www.faako.com