日期:2014-05-18  浏览次数:20588 次

SQLServer2008关于二进制的问题
看代码:
SQL code

DECLARE @int INT;
SET @int=1901;
SELECT CAST(@int AS BINARY) AS '转换';
--结果
转换
0x00000000000000000000000000000000000000000000000000000000076D


为什么1901转换二进制是‘0x00000000000000000000000000000000000000000000000000000000076D’,而不是‘000001001010111101010011’这是才是正确的。高手请帮忙解答下!

------解决方案--------------------
SQL code
当数据从字符串数据类型(char、varchar、nchar、nvarchar、binary、varbinary、text、ntext 或 image)转换为不同长度的 binary 或 varbinary 数据类型时,SQL Server 将在数据的右侧填充或截断数据。 从其他数据类型转换为 binary 或 varbinary 时,将在数据的左侧填充或截断数据。 填充将通过使用十六进制的零来完成。 

如果 binary 数据是最容易来回移动的数据,则将数据转换为 binary 和 varbinary 数据类型很有用。 将任一类型的任一值转换为足够大的二进制值,然后转换回原类型时,如果两次转换都是在相同的 SQL Server 版本上进行的,将始终生成相同的值。 值的二进制表示形式在不同 SQL Server 版本之间可能会有所不同。 

可以将 int、smallint 和 tinyint 转换为 binary 或 varbinary,但是如果将 binary 转换回整数值,则在发生了截断的情况下此值将不同于原始整数值。 例如,以下 SELECT 语句显示整数值 123456 通常被存储为二进制值 0x0001e240:



DECLARE @int INT;
SET @int=1901;
SELECT CAST(@int AS varbinary(max)) AS '转换';

select  dbo.DecToBin(@int) 


转换
----------------------------------------------------------------------------------------------------------------
0x0000076D

(1 行受影响)


----------------
0000011101101101

(1 行受影响)

------解决方案--------------------
显示的是16进制哦
------解决方案--------------------
探讨

显示的是16进制哦

------解决方案--------------------
数据是二进制,是以十六进制表示形式。
-------------------------------------------
引用帮助说明:
二进制常量以 0x(一个零和小写字母 x)开始,后跟位模式的十六进制表示形式。例如,0x2A 表示十六进制值 2A,它等于十进制值 42 或单字节位模式 00101010。