使用where搜索字符串,就像不工作一样

时间:2011-05-13 08:41:38

标签: sql

我需要从用户搜索“苹果不是”的表的“描述”列中获取“Ap​​ple”。 我写过类似的东西

set @ExactKey = N'The Apple'
set @NotKey =N'the'


SELECT R.ResourceId
FROM Resource R
WHERE Description LIKE @ExactKey  OR ExternalIdentifier LIKE @ExactKey 
AND ExternalIdentifier NOT LIKE @NotKey OR  Description NOT LIKE  @NotKey 

这不起作用

2 个答案:

答案 0 :(得分:4)

要使用LIKE,您需要添加%

将搜索字符串更改为:

set @ExactKey = N'%The Apple%' 
set @NotKey = N'%the%' 

然而,这不起作用,除非您启用区分大小写,因为the将与the中的the apple匹配。

答案 1 :(得分:1)

您需要为LIKE强制使用二进制或区分大小写的排序规则,并使用前导和尾随%通配符(编辑:如ck所述)。

我也猜测你的AND / OR也是错误的,因为:

  • 运算符优先级
  • 我假设您希望在同一列上使用LIKE / NOT LIKE

这样的东西
WHERE
    (
       Description COLLATE Latin1_General_BIN LIKE @ExactKey
       AND
       Description COLLATE Latin1_General_BIN NOT LIKE @NotKey
    )
    OR
    (
       ExternalIdentifier COLLATE Latin1_General_BIN LIKE @ExactKey
       AND
       ExternalIdentifier COLLATE Latin1_General_BIN NOT LIKE @NotKey
    )

但是你可以通过全文搜索更好。那么“理论”还是“什一税”呢?