带有二进制的SQL WHERE子句

时间:2011-04-23 15:19:11

标签: sql sql-server where

我有一个带有varbinary(max)列的SQL Server数据库表(即Data VarBinary(max)命令中的create table

是否可以在二进制数据中使用某种模式匹配来执行where子句?

例如,使用C#.NET SqlCommand对象,我发现我可以执行select * from TableName where Data = 0x4638763849838709 go之类的查询,其中值是完整数据列值。但我希望能够模拟匹配部分数据,例如select * from TableName where Data = 0x%3876% go

感谢。

4 个答案:

答案 0 :(得分:10)

您在问题中提供的示例

WITH t(c) AS
(
SELECT CAST(0x4638763849838709 AS VARBINARY(MAX)) 
)
SELECT *
FROM t
WHERE CHARINDEX(0x3876,c) > 0

答案 1 :(得分:3)

SQL Server不提供搜索VARBINARY字段的任何功能,因此这是不可能的。

请参阅this相关的SO问题和答案。

基本上,您需要提取二进制信息并使用一种能够理解其搜索格式的工具。它不能直接在SQL Server中完成。

答案 2 :(得分:0)

SELECT * 
FROM myTable 
WHERE CONVERT(varchar(max),myvarbinaryfield,2) like '%46387638%'

也许我应该使用OP的示例:

select * 
from TableName 
where CONVERT(varchar(max),Data,2) like '%3876%'

答案 3 :(得分:-1)

在黑暗中拍摄,但您可以先将字段转换为VARCHAR(MAX),然后使用LIKE语句进行比较。

E.g。

SELECT *
FROM TableName
WHERE CONVERT(VARCHAR(MAX), Data) LIKE '%2345%'