我有一个带有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
。
感谢。
答案 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%'