找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 数据库 查看内容

二进制转十进制的SQL函数

2009-12-14 18:36| 发布者: admin| 查看: 35| 评论: 0|原作者: 柳梦璃

◇--功能:将二进制字符串(VARCHAR......


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

最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 21:29 , Processed in 0.223838 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部