逗号之间的SQL搜索

时间:2013-05-17 03:30:14

标签: c# sql sql-server linq

我正在努力搜索只出现在字符串中两个逗号之间的单词。

例如,在我的数据库中,我有以下数据:

------------------------------------------------------------------------
| ID  | TITLES
------------------------------------------------------------------------
|  1  | THE QUICK BROWN FOX , JUMPS OVER , THE LAZY DOG
------------------------------------------------------------------------
|  2  | THE, QUICK FOX JUMPS NIGHTLY , ABOVE WIZARD
------------------------------------------------------------------------

因此,当人们搜索 QUICK FOX 时,他们应该获得两行。

但是当他们搜索时 QUICK FOX JUMPS ,它应该只返回第2行,因为这些词只出现在逗号的同一部分。它不应该返回第一行。单词QUICK,FOX和JUMPS都在第一行,但它们不属于同一部分(以逗号分隔)。

是否可以为此创建SQL查询? Currenly我正在分解每个逗号并在C#代码中单独进行搜索(虽然不是很优雅)。

我希望这是有道理的。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

如果您愿意在C#(这听起来像一个选项)中这样做,我认为您可以非常优雅地做到这一点。假设myRowsIEnumerable<Row>代表行的RowmySearchTermsIEnumerable<string>,其中包含所有搜索字词。

myRows.Where(row => row.Title.Split(",")
                    .Any(part => mySearchTerms
                         .All(searchTerm => part.Contains(searchTerm)));

换句话说,我们正在寻找两个逗号之间的字符串包含所有搜索词的行。

答案 1 :(得分:0)

如果您不关心将搜索字词组合在一起,则可以使用LIKE来获取完整的搜索字词。

select ID, Titles
from theTable
where Titles like '%Quick Fox Jumps%'

答案 2 :(得分:0)

如果处理速度很重要,正确的解决方案是使用全文搜索:
标准SQL Server一个,或外部索引器(Lucene等)。

使用外部索引器时,您可以控制向其提供的内容,这样就可以删除不在两个逗号之间的内容。

如果处理速度不重要,C#似乎是最好的解决方案。

答案 3 :(得分:0)

这将返回“Quick Fox Jumps”所需的结果。

select ID, Titles
from Test
where Titles like '%Quick Fox Jumps%'

现在,如果您希望获得“Quick Fox”的结果,请尝试以下操作:

select ID, Titles
from Test
where Titles like '%Quick Fox%'

%代表任何字符(每个展示位置之前/之后)。

_代表每个展示位置之前/之后只有一个字符。

因此,你可以放置许多字符_的数量。

有关详细信息,请参阅here

修改

如果你想......

返回 快速 跳转 的行,即使它们不在一起,也请搜索为:

<强>%快速%跳转%