SQL Server 带二进制的SQL WHERE子句

bvn4nwqk  于 2023-02-11  发布在  其他
关注(0)|答案(4)|浏览(149)

我有一个包含varbinary(max)列的SQL Server数据库表(即create table命令中的Data VarBinary(max))。
是否可以在二进制数据中使用某种模式匹配来执行where子句?
例如,使用C# .NET SqlCommand对象,我发现可以执行类似select * from TableName where Data = 0x4638763849838709 go的查询,其中的值是完整的数据列值,但我希望能够只对部分数据进行模式匹配,例如select * from TableName where Data = 0x%3876% go
谢谢。

bvuwiixz

bvuwiixz1#

就你在问题中所举的例子

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

eiee3dmh2#

SQL Server不提供任何搜索VARBINARY字段的函数,因此这是不可能的。
参见this相关SO问题和答案。
从本质上讲,您需要提取二进制信息,并使用能够理解其格式的工具进行搜索,而这在SQL Server中无法直接完成。

m2xkgtsf

m2xkgtsf3#

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

也许我应该用OP的例子:

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

**解释:**字符0x未添加到样式2转换结果的左侧。请参阅Microsoft文档以了解如何转换varbinary数据。

https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver16#binary-styles

2uluyalo

2uluyalo4#

这里是瞎猜的,但是您可以先将字段转换为VARCHAR(MAX),然后使用LIKE语句进行比较。
例如

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

相关问题