二进制转十进制的SQL函数

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

-- 功能: 将二进制字符串(VARCHAR)转换为十进制数(INT)

-- 输入参数: @StrBin 待转换的二进制字符串

-- 返回值: 相应的十进制数,如果二进制数非法,返回-1

-- 注意: @StrBin的长度不能大于31

-- 作者: cheyo@JMU Email: cheyocn at hotmail.com

-- 来源: telnet://bbs.jmu.edu.cn http://bbs.jmu.edu.cn

-- 日期: 2005-10-05

-- 例子: SELECT dbo.Bin2Dec('1001') AS '15的二进制表示'

CREATE FUNCTION Bin2Dec(@StrBin VARCHAR(31))

RETURNS INT ---- 只支持最多31位长二进制字符串的解析

AS

BEGIN

DECLARE @DecValue AS INT -- 十进制值

DECLARE @BinLen AS TINYINT -- 二进制字符串长度

DECLARE @Index AS TINYINT -- 处理二进制字符串长度的索引

DECLARE @CurrBit AS CHAR(1) -- 当前在处理哪一位

SET @BinLen = LEN(@StrBin)

SET @DecValue = 0

SET @Index = 0

WHILE @Index < @BinLen

BEGIN

SET @Index = @Index + 1

SET @CurrBit = CAST(SUBSTRING(@StrBin, @Index, 1) AS CHAR(1))

IF (@CurrBit <> '0' AND @CurrBit <> '1') -- 出现非法字符,返回-1

BEGIN

SET @DecValue = -1

BREAK

END

ELSE

BEGIN

SET @DecValue = @DecValue * 2

IF(@CurrBit = '1')

BEGIN

SET @DecValue = @DecValue + POWER(2, 0)

END

END

END

RETURN @DecValue

END

GO

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航