全文搜索中的单双引号错误

时间:2013-08-14 02:57:27

标签: sql-server sql-server-2008

我遇到了麻烦。如果在搜索语句中输入Single-Double引号会引发错误,我的sql语句如下:

 SELECT UsersID,Sex,Age FROM dbo.UserBasicInfo WHERE 
       CONTAINS(PositionDesired,'"*"JAVA*"') 

错误消息:

Msg 7630,Level 15,State 3,Line 1 全文搜索条件'JAVA*''"*"JAVA*"'附近的语法错误。

假设结果必须包含单双引号,如:"JAVA"PHP"怎么办? 谢谢!

1 个答案:

答案 0 :(得分:2)

你有一个额外的嵌入式双引号:

CONTAINS(PositionDesired,'"*"JAVA*"') 
----------------------------^

这有效地提前终止了字符串,而SQL Server并不了解那些额外的内容。

应该(我认为,不是全文大师):

CONTAINS(PositionDesired,'"*JAVA*"') 

但是,我认为这将消除错误,但不会返回您所追求的结果,因为忽略了标点符号。您可能必须使用CONTAINSLIKE的组合,例如:

CONTAINS(PositionDesired,'JAVA')
  AND PositionDesired LIKE '%"JAVA"%'

或者您添加的新要求:

CONTAINS(PositionDesired,'JAVA PHP')
  AND PositionDesired LIKE '%"JAVA"PHP%"'

LIKE子句中,您不必担心双引号的转义或加倍,因为它不是字符串分隔符。

希望CONTAINS子句首先过滤结果,但即使在正常查询中也不能保证短路或评估顺序;我不知道有关全文和标准过滤器的查询。