如何比较SQL Server中where子句中的varbinary

时间:2011-07-11 10:03:10

标签: sql sql-server-2008 comparison bytearray varbinary

我想将varbinary类型与字节数组进行比较。到目前为止我已尝试过:

DECLARE @data AS NVARCHAR(MAX)='4283'

Select * from table1 Where bindayData=CAST(@data AS VARBINARY)

但这不起作用。

我注意到一个奇怪的行为:当我静静地使用它时

Select * from table1 Where bindayData=CAST('4283' AS VARBINARY)

然后它工作正常。但是当我声明一个变量时,它不起作用。

请分享您的想法。

谢谢, Naresh Goradara

2 个答案:

答案 0 :(得分:9)

尝试

DECLARE @data AS NVARCHAR(MAX)='4283'

字符串常量'4283'在CAST中是非unicode,每个字符一个字节。
这给出了4个字节varbinary 0x34323833

当您使用NVARCHAR(MAX)时,它会更改为unicode N'4283'字符串,每个字符包含2个字节。
这给出了8个字节varbinary,类似于0x0034003200380033

答案 1 :(得分:1)

在convert函数中使用样式2不会截断最终结果。本质上,它保留了“ 0x”预定义,将结果转换为非二进制结果。 请参考Microsoft的文档。底部有一个示例: https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15

Select * 
from table1 
Where convert(varchar(max),bindayData,2) like '%4283%'