数字转换与SQL Server中数据类型的长度不匹配
我使用数据类型数字转换与SQL Server中数据类型的长度不匹配,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,我使用数据类型bigInt引用以下数字 DECLARE @Number Bigint = '269687584' 当我将数据类型转换为Varbinary(4)时,它返回0x10131B20 但是当我计算Varbinary数据的长度时,它只返回3。 我不知道到底出了什么事 在SQL Server数据库中,我想编写一个查询,将Bigint转换为 Varbinary(4),但仅转换为Varbinary(3) 以下是我尝试过的: DECLARE @Number BIGINT = '269687584'
bigInt
引用以下数字
DECLARE @Number Bigint = '269687584'
当我将数据类型转换为Varbinary(4)
时,它返回0x10131B20
但是当我计算Varbinary
数据的长度时,它只返回3。
我不知道到底出了什么事
在SQL Server数据库中,我想编写一个查询,将Bigint
转换为
Varbinary(4)
,但仅转换为Varbinary(3)
以下是我尝试过的:
DECLARE @Number BIGINT = '269687584'
SELECT
@Number,
CONVERT(VARBINARY(4), @Number),
LEN(CONVERT(VARBINARY(4), @Number))
请改用DATALENGTH:
DECLARE @Number BIGINT ='269687584'
SELECT @Number, CONVERT(VARBINARY(4), @Number), DATALENGTH(CONVERT(VARBINARY(4), @Number))
没有什么不对的。您应该使用datalength检查长度:
DECLARE @Number Bigint ='269687584'
SELECT @Number, CAST(@Number AS Varbinary(4)), DATALENGTH(CAST(@Number AS Varbinary(4)))
LEN
函数需要一个字符串,并返回删除尾随空格的长度。在这种情况下,二进制值的最后一个字节0x10131B20
恰好是一个空格字符,并且未被计数。解决方法是使用DATALENGTH
。旁注:初始化数字时,不应使用单引号-这表示字符串文字,因此实际上是在进行从字符串到目标数据类型的隐式转换。只需使用此选项来避免这种转换:DECLARE@Number BIGINT=269687584
(初始化数字时不需要单引号!!)另外:毕竟您将变量定义为VARbinary-variable length-因此它只需使用实际需要的字节数来存储值-在本例中为3字节。但这没什么错!只需将VARBINARY(4)
值转换回BIGINT
-您将得到与开始时相同的结果-不会丢失任何数据或信息。。。。。