SQL Server 中的 INT 到 BINARY 字符串
在 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