65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 中的 INT 到 BINARY 字符串

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2011年6月13日

CPOL
viewsIcon

57733

在 SQL Server 中将 INT 转换为 BINARY

SQL Server 没有将 INT 转换为 BINARY 的原生方法。

执行

SELECT CAST(25 AS BINARY)

实际上返回 19,这是十六进制等效值,而不是二进制值。

下面,你可以看到三种数字表示形式之间的区别

  • 整数: 25
  • 二进制: 11001
  • 十六进制: 19

所以我有了两个要求

  • 25 的二进制表示形式作为 string:'11001'
  • 能够设置固定的最小结果大小
    • fixedSize=2: '11001'
    • fixedSize=5: '11001'
    • fixedSize=10: '0000011001'

所以我深入思考,提取出我基本的二进制转换知识,并编写了这个标量函数,它正好可以做到这一点

CREATE FUNCTION INT2BIN
(
 @value INT,
 @fixedSize INT = 10
)
RETURNS VARCHAR(1000)
AS
BEGIN
 DECLARE @result VARCHAR(1000) = '';

 WHILE (@value != 0)
 BEGIN
  IF(@value%2 = 0) 
   SET @Result = '0' + @Result;
  ELSE
   SET @Result = '1' + @Result;
   
  SET @value = @value / 2;
 END;

 IF(@FixedSize > 0 AND LEN(@Result) < @FixedSize)
  SET @result = RIGHT('00000000000000000000' + @Result, @FixedSize);

 RETURN @Result;
END
GO

警告:上面的代码仅支持等于或低于 20@FixedSize 值。 如果你需要支持更高的值,只需在 'RIGHT' 语句中添加更多的零。 另一种选择是通过引入另一个循环来使这种填充动态化。

CREATE FUNCTION INT2BIN
(
 @value INT,
 @fixedSize INT = 10
)
RETURNS VARCHAR(1000)
AS
BEGIN
 DECLARE @result VARCHAR(1000) = '';

 WHILE (@value != 0)
 BEGIN
  IF(@value%2 = 0) 
   SET @Result = '0' + @Result;
  ELSE
   SET @Result = '1' + @Result;
   
  SET @value = @value / 2;
 END;

 IF(@fixedSize IS NOT NULL AND @fixedSize > 0 AND LEN(@Result) < @fixedSize)
 BEGIN
  DECLARE @len INT = @fixedSize;
  DECLARE @padding VARCHAR(1000) = '';
 
  WHILE @len > 0
  BEGIN
   SET @padding = @padding + '0';
   SET @len = @len-1;
  END; 
  SET @result = RIGHT(@padding + @result, @fixedSize);
 END;
 
 RETURN @result;
END
GO
SQL Server 中将 INT 转换为 BINARY 字符串 - CodeProject - 代码之家
© . All rights reserved.