使用SQL选择包含搜索字符串中一小部分的行

时间:2015-08-18 06:06:29

标签: sql stored-procedures full-text-search azure-sql-database contains

我试图运行一个选择行的strored过程(来自全文索引列-sql-azure v12),其中单词包含搜索词的一小部分。例如,如果用户键入" natio"在搜索字符串中,我想返回包含" international"的所有行。我认为我应该在搜索字符串之前和之后使用前缀*,但这不起作用。这是我到目前为止所尝试的内容。

SET @searchString = '*' + @searchString +'*'
or SET @searchString = @searchString +'*'
or SET @searchString = '*' + @searchString

SELECT * FROM myTable where FREETEXT(sWords, @searchString )
or
SELECT * FROM myTable where CONTAINS(sWords, @searchString )

以上组合似乎都不起作用。只有输入整个单词(在本例中为国际单词)才有效。任何帮助都将受到赞赏。

修改

我从上面列出的问题链接得到了半个答案:

SELECT *
FROM product
WHERE CONTAINS(name,'"*1340*"');

我为变量使用了相同的逻辑:

SET @searchString ='"*' + @searchString + '*"';

它解决了我想要完成的一半。如果我进入" inter"在搜索字符串中,我会得到所有以inter开头的单词,例如international。但是,如果我进入国家",那么我就不会得到#34;国际"。

我想我还需要深入挖掘才能找到完整的解决方案......

2 个答案:

答案 0 :(得分:1)

不幸的是,全文搜索仅支持前缀通配符:CONTAINS(<>,'“book *”'),这与Sql Server内部行为相同。您可以在此处找到有关如何解决此限制的一些建议: Full text catalog/index search for %book%

答案 1 :(得分:0)

您可以尝试使用LIKE

SELECT * FROM myTable where sWords like '%'+@searchString+'%';