-- 任意进制转换为10进制
-- 例 0FA 转换为 16进制 select dbo.f_BinaryToInt('0123456789ABCDEF', '0FA')
CREATE function dbo.f_BinaryToInt(@BinaryFormate varchar(100), @num varchar(200))
--@BinaryFormate 为自定义的进制格式
--@num 为要转换成10进制的自定义进制数
--16进制格式 0123456789ABCDEF
returns DECIMAL(18, 0)
as
BEGIN
declare @result DECIMAL(18, 0), @Binary int, @V char(1), @len int, @value int
SELECT @result=0, @Binary = LEN(@BinaryFormate), @len = 0
SET @num = rtrim(ltrim(upper(reverse(@num)))) --为方便计算,将字符串反向
WHILE @len < LEN(@Num)
BEGIN
SET @V = SUBSTRING(@num, @len + 1, 1)
SET @value = CHARINDEX(@v, @BinaryFormate) -1
SET @result = @value*power(@Binary, @len) + @result
SET @len = @len + 1
END
return(@result)
END
-- 10进制转换为任意进制
-- 例 250 转换为 3位16进制 select dbo.f_IntToBinary('0123456789ABCDEF', 250, 3)
CREATE function dbo.f_IntToBinary(@BinaryFormate varchar(100), @num int, @len int)
--@BinaryFormate 为自定义的进制格式
--@num 为要转换成自定义进制的10进制数
--@len为转换后占用的位数
--16进制格式 0123456789ABCDEF
returns varchar(200)
as
BEGIN
declare @result varchar(200), @Binary int
set @result=''
SET @Binary = LEN(@BinaryFormate)
WHILE LEN(@result)<@len
select @result=substring(@BinaryFormate,@num%@Binary+1,1)+@result,@num=@num/@Binary
return(@result)
END