45IT.COM- 电脑学习从此开始!
DIY硬件教程攒机经验装机配置
设计Photoshop网页设计特效
系统注册表DOS系统命令其它
存储主板显卡外设键鼠内存
维修显卡CPU内存打印机
WinXPVistaWin7unix/linux
CPU光驱电源/散热显示器其它
修技主板硬盘键鼠显示器光驱
办公ExcelWordPowerPointWPS
编程数据库CSS脚本PHP
网络局域网QQ服务器
软件网络系统图像安全
页面导航: 首页 > 设计学院 > 网络编程 > 数据库 >

二进制转十进制的SQL函数

电脑软硬件应用网 45IT.COM 时间:2011-11-09 08:01 作者:佚名
-- 功能: 将二进制字符串(VARCHAR)转换为十进制数(INT)
-- 输入参数: @StrBin 待转换的二进制字符串
-- 返回值: 相应的十进制数,如果二进制数非法,返回-1
-- 注意: @StrBin的长度不能大于31
-- 作者: cheyo@JMU           Email:  cheyocn at hotmail.com
-- 例子: 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
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: baidushare.htm
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
你可能感兴趣的文章
推荐知识