如何将SQL Server中存储为VARCHAR的二进制字符串转换为INT?
SQL Server:VARCHAR二进制字符串转十进制数值
方法一:用CONVERT直接转换(最简单)
SQL Server的CONVERT函数支持按指定基数转换字符串,第三个参数传2,就能把二进制字符串转成十进制数:
SELECT CONVERT(int, '0010', 2) AS DecimalValue; -- 结果:2
- 如果二进制字符串太长(超过31位,int是32位有符号类型),换用
bigint避免溢出:
SELECT CONVERT(bigint, '11111111111111111111111111111111', 2) AS DecimalValue; -- 结果:4294967295
- 要是字符串里有非0/1的字符,
CONVERT会报错。可以先用PATINDEX校验:
DECLARE @BinStr VARCHAR(100) = '010a1'; IF PATINDEX('%[^01]%', @BinStr) = 0 SELECT CONVERT(int, @BinStr, 2) AS DecimalValue; ELSE SELECT '输入不是合法的二进制字符串' AS Error;
方法二:自定义函数(兼容老版本或特殊逻辑)
如果你的SQL Server版本不支持上述CONVERT的基数参数(绝大多数现代版本都支持),可以写个自定义函数手动计算:
CREATE FUNCTION dbo.BinaryToDecimal(@BinaryStr VARCHAR(100)) RETURNS BIGINT AS BEGIN DECLARE @Result BIGINT = 0; DECLARE @StrLen INT = LEN(@BinaryStr); DECLARE @Index INT = 1; WHILE @Index <= @StrLen BEGIN SET @Result = @Result * 2 + CAST(SUBSTRING(@BinaryStr, @Index, 1) AS INT); SET @Index = @Index + 1; END RETURN @Result; END
调用示例:
SELECT dbo.BinaryToDecimal('0010') AS DecimalValue; -- 结果:2
内容的提问来源于stack exchange,提问作者paulopadopalos
相关产品推荐
相关产品推荐

