SQL 二進制字符串轉十進制


-- 功能: 將二進制字符串(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM