首页 > 解决方案 > 在 T-SQL 中将二进制字符串转换为 INT

问题描述

我有 7 位二进制数据存储在 SQL Server 数据库中作为varchar. 这 7 位二进制数据最终需要转换为 int。我试图获取这个二进制字符串,然后varbinary转换为整数,然后再转换为整数。转换为varbinary可以接受十六进制字符串,但我无法找到这种转换接受二进制字符串的方法。

示例字符串:

0000010
0000100
0001001

这些应转换为:

2
4
9

我可以创建一个 CLR 函数来调用 C# 函数,但我希望这一切都在 T-SQL 中完成。

标签: sql-servertsql

解决方案


手动转换

select id, sum(cast(substring(str, 7-p.pos, 1) as int) * power(2, p.pos)) val
from (
  SELECT 1 id, '0001001' str union all
  SELECT 2 id, '0001011' str
) t
cross apply (
  values 
     (0)
    ,(1)
    ,(2)
    ,(3)
    ,(4)
    ,(5)
    ,(6)
  ) p(pos)
group by id

推荐阅读