T-SQL使用带有连字符的CONTAINS谓词

时间:2011-08-03 17:38:55

标签: sql tsql sql-server-2008 contains

想象一个包含一列(column1)的表(table1)和一个值为'roll-over'的记录。然后使用以下SQL查询,您将不会获得任何记录。

select * from table1 where contains(column1, ' "roll-over" ')

有没有办法逃脱搜索文本中的连字符?到目前为止,我没有成功尝试这个(我已经尝试了以下所有逃脱但没有成功)。

select * from table1 where contains(column1, ' "roll\-over" ')
select * from table1 where contains(column1, ' "roll!-over" ')
select * from table1 where contains(column1, ' "roll[-]over" ')

此外,请注意,我的应用程序无法使用LIKE关键字,因为我正在利用全文搜索索引。

2 个答案:

答案 0 :(得分:4)

看起来你可能无法做到这一点。请阅读本文:

https://support.microsoft.com/en-us/help/200043/prb-dashes---ignored-in-search-with-sql-full-text-and-msidxs-queries

他们建议只搜索字母数字值(跛脚)或使用LIKE子句(不是你的选项)。

答案 1 :(得分:0)

部分解决方案:您可以通过使用charindex函数测试字符串是否包含字符来强制查询返回包含连字符(或任何字符)的记录,例如:

select * from table1 where contains(column1, ' "roll-over" ')
and charindex('-', column1) > 0