5

我想将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)

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

请分享你的想法。

谢谢,纳雷什·戈拉达拉

4

2 回答 2

10

尝试

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

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

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

于 2011-07-11T10:05:54.120 回答
3

在转换函数中使用样式 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%'
于 2020-07-27T14:53:29.587 回答