我有一个表,上面有诸如"F-10“或"Jim-beam”之类的值。如果用户搜索了"F10“或"Jimbeam”,我有没有办法得到这些结果?基本上,用户可能不知道条目中有破折号,但我希望搜索足够宽大,以便找到它。
现在我正在尝试使用:
SELECT *
WHERE
CONTAINS(table.*, ,'"F10*" Or "Jimbeam*"')发布于 2016-02-18 23:42:33
您可以创建数组来从用户处获取插入的值
然后对数组中的每个值使用like %value1%或like %value2%
这可能是一种解决方案
发布于 2016-02-19 00:24:30
您可以尝试将数据库中的值替换为不包含任何特殊字符的值。我之前使用了这个答案中描述的函数:https://stackoverflow.com/a/1008566/894974,因此安装了该函数后,where子句将变为:
where dbo.RemoveNonAlphaCharacters([columnToSearch]) like '%'+@searchString+'%'发布于 2016-02-19 04:40:54
您可以创建一个单独的列,在该列中删除这些单词中的破折号,然后对该列执行全文搜索。
例如,您的表可能如下所示(或者新列可能是新表的一部分):
Id Text TextForFullTextSearch
-----------------------------------------
1 Jim-beam Jimbeam
2 F-10 F10
3 blah blah blah blah如果您需要同时支持"Jimbeam*"和"Jim-beam*"上的搜索,那么您可以对旧的和新的列执行全文搜索。
这确实需要您将文本存储两次,以便在您的流程中有更多的齿轮。好处将是在搜索精度和性能(如将会慢得多),所以你必须权衡这些好处和增加的复杂性。
在插入和更新数据时填充新列的一些想法:
https://stackoverflow.com/questions/35485818
复制相似问题