-- 功能: 將二進制字符串(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 BIGINT ---- 只支持最多31位長二進制字符串的解析 AS BEGIN DECLARE @DecValue AS BIGINT -- 十進制值 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