SQL WHERE предложение с двоичным - PullRequest
10 голосов
/ 23 апреля 2011

У меня есть таблица базы данных SQL Server со столбцом varbinary(max) (т. Е. Data VarBinary(max) в команде create table).

Можно ли сделать предложение where с каким-либо сопоставлением с образцом в двоичных данных?

Например, используя объект C # .NET SqlCommand, я обнаружил, что могу выполнить запрос, подобный select * from TableName where Data = 0x4638763849838709 go, где значением является полное значение столбца данных. Но я хочу иметь возможность сопоставлять шаблоны только с частями данных, например select * from TableName where Data = 0x%3876% go.

Спасибо.

Ответы [ 3 ]

10 голосов
/ 23 апреля 2011

Для примера, который вы дали в вопросе

WITH t(c) AS
(
SELECT CAST(0x4638763849838709 AS VARBINARY(MAX)) 
)
SELECT *
FROM t
WHERE CHARINDEX(0x3876,c) > 0
3 голосов
/ 23 апреля 2011

SQL Server не предоставляет никаких функций для поиска в полях VARBINARY, поэтому это невозможно.

См. этот связанный вопрос и ответы SO.

По сути, вам нужно будет извлечь двоичную информацию и использовать инструмент, который понимает формат, в котором она находится, для поиска по ней.Это нельзя сделать напрямую в SQL Server.

0 голосов
/ 23 апреля 2011

Здесь делается снимок в темноте, но вы можете сначала преобразовать поле в VARCHAR (MAX), а затем сравнить его с помощью оператора LIKE.

Например,

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