我想将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
答案 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%'