Sql server SQL Server:类似语法和添加运算符错误

Sql server SQL Server:类似语法和添加运算符错误,sql-server,search,casting,binary,Sql Server,Search,Casting,Binary,我正在使用这种语法,如果它没有出错,它应该可以正常工作 SELECT e.user_key, e.char_key, CONVERT(VARCHAR,substring(e.char_data, 9, 16)) AS name, p.CHAR_DATA FROM CHAR_DATA0 AS e INNER JOIN CHAR_DATA1 AS p ON e.CHAR_KEY = p.CHAR_KEY WHERE p.CHAR_DATA LIKE

我正在使用这种语法,如果它没有出错,它应该可以正常工作

SELECT
   e.user_key,
   e.char_key,
   CONVERT(VARCHAR,substring(e.char_data, 9, 16)) AS name,
   p.CHAR_DATA
FROM 
   CHAR_DATA0 AS e
INNER JOIN  
   CHAR_DATA1 AS p ON e.CHAR_KEY = p.CHAR_KEY
WHERE 
   p.CHAR_DATA LIKE '%'+CAST(cast(reverse(CONVERT(BINARY, 9998)) as BINARY(2)) AS BINARY(2))+'%'
ORDER BY 
   char_key
我需要帮助。如何更改此代码以使其正常工作

CHAR\u DATA
列的类型为
BINARY(2000)

我有这样的数据:(使用select获取)

我需要搜索这些行中的某个地方,如果它包含我试图查找的条目

where Convert(varChar(4000), CHAR_DATA,2 ) like '%' + Convert(varChar(4), CONVERT(BINARY(2), 9998),2 )+'%'
我要找的总是2个字节。所以我在上面的语法中寻找0x0E27

这是一种有效的语法,但不是我想要做的:

SELECT 
   CONVERT(INT,cast(reverse(substring(char_data, 37, 2)) as BINARY(2))) AS helm 
FROM CHAR_DATA0 
WHERE CHAR_KEY = 5

另一个问题是,如果我使用nvarchar(MAX),它给出的结果甚至不包含我试图查找的数据。

我尝试选择like子句,主要是因为我不需要您的模式(表)来执行此操作,并且已经发现了一个bug(我想):

where Convert(varChar(4000), CHAR_DATA,2 ) like '%' + Convert(varChar(4), CONVERT(BINARY(2), 9998),2 )+'%'
产生:

Msg 402, Level 16, State 1, Line 1
The data types varchar and binary are incompatible in the add operator.
。。。其中as(将总体结果类型更改为varchar):

产生(我们需要在这里进行编码):

也许这就是问题的全部(尽管我对此表示怀疑)?试试看,让他知道你的进展如何。我对此表示怀疑,因为我想如果这是整个问题,那么您可能会从错误消息(我猜您可能会从SQL Server获得)中自行解决


干杯。基思。

如果可能的话,我会将这两个字节保留在一个单独的字段中,以避免完全这样做。你能改变CHAR_DATA1表的设计吗(我怀疑不能,因为它的名字是“dodgy”)。对不起,我不能改变设计。我被这个非常糟糕的设计所困扰,我需要去锻炼。请告知。:)当然在文本(非二进制)中进行比较。。。一想到它,你就会明白。干杯
Msg 402, Level 16, State 1, Line 1
The data types varchar and binary are incompatible in the add operator.
SELECT '%' + CAST( CAST(REVERSE(CONVERT(BINARY, 9998)) as BINARY(2)) AS VARCHAR(2) ) + '%'
%'%    -- that is: percent, apostrophe, beam (the musical note), percent