如何在 varbinary 中转换 varchar?
How to cast varchar in varbinary?
我尝试通过附加 varchar 字符串来更新列值。
MyTable{
Id int,
MyValueColumn varbinary(max),
MyParamColumn varchar(50)
}
我如何追加:
'{"ZoneId":'+cast ([MyValueColumn] as varchar)+', "ZoneName":"'+[MyParamColumn]+'"}'
而这个 return 正确值:
'{"ZoneId":1018, "ZoneName":"szz"}'
但现在我将结果转换为 varbinary 并再次将其转换为 varchar(用于检查 varbinary 的正确性):
cast (cast('{"ZoneId":'+cast ([MyValueColumn] as varchar)+', "ZoneName":"'+[MyParamColumn]+'"}' as varbinary) as varchar)
结果:
'{"ZoneId":1018
有什么问题吗?
当您使用 cast
到 varbinary
而没有明确指定长度时,默认长度为 30。
因此,如果您使用的是 varbinary
,而不是 varbinary(n)
或 varbinary(max)
,那么您的数据可能会发生一些修剪。
参考MSDN。
注意:
此外,您在查询中遗漏了 '
:cast (cast({"ZoneId":'
应该是 cast (cast('{"ZoneId":'
更新
我创建了一个简单的例子:
declare @text varchar(50)
select @text = '{"ZoneId":'+cast (1018 as varchar)+', "ZoneName":"'+'szz'+'"}'
select cast(cast(@text as varbinary) as varchar)
select cast(cast(@text as varbinary(max)) as varchar(max))
当我们使用 varbinary(max)
时,它会为您提供首次投射中的修剪文本和原始未修剪文本
我尝试通过附加 varchar 字符串来更新列值。
MyTable{
Id int,
MyValueColumn varbinary(max),
MyParamColumn varchar(50)
}
我如何追加:
'{"ZoneId":'+cast ([MyValueColumn] as varchar)+', "ZoneName":"'+[MyParamColumn]+'"}'
而这个 return 正确值:
'{"ZoneId":1018, "ZoneName":"szz"}'
但现在我将结果转换为 varbinary 并再次将其转换为 varchar(用于检查 varbinary 的正确性):
cast (cast('{"ZoneId":'+cast ([MyValueColumn] as varchar)+', "ZoneName":"'+[MyParamColumn]+'"}' as varbinary) as varchar)
结果:
'{"ZoneId":1018
有什么问题吗?
当您使用 cast
到 varbinary
而没有明确指定长度时,默认长度为 30。
因此,如果您使用的是 varbinary
,而不是 varbinary(n)
或 varbinary(max)
,那么您的数据可能会发生一些修剪。
参考MSDN。
注意:
此外,您在查询中遗漏了 '
:cast (cast({"ZoneId":'
应该是 cast (cast('{"ZoneId":'
更新
我创建了一个简单的例子:
declare @text varchar(50)
select @text = '{"ZoneId":'+cast (1018 as varchar)+', "ZoneName":"'+'szz'+'"}'
select cast(cast(@text as varbinary) as varchar)
select cast(cast(@text as varbinary(max)) as varchar(max))
当我们使用 varbinary(max)