0

我正在研究搜索仅出现在字符串中两个逗号之间的单词的要求。

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

------------------------------------------------------------------------
| 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 查询?目前我正在分解每个逗号并在 C# 代码中单独进行搜索(虽然不是很优雅)。

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

4

4 回答 4

2

如果您愿意在 C# 中执行此操作(这听起来像是一种选择),我认为您可以非常优雅地执行此操作。假设myRows是一个表示行IEnumerable<Row>的类型,并且是一个包含所有搜索词的类型。RowmySearchTermsIEnumerable<string>

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

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

于 2013-05-17T03:35:32.607 回答
0

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

使用外部索引器时,您可以控制提供给它的内容,因此您可以删除不在两个逗号之间的内容。

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

于 2013-05-17T03:39:35.433 回答
0

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

select ID, Titles
from theTable
where Titles like '%Quick Fox Jumps%'
于 2013-05-17T03:33:12.347 回答
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%'

%代表任何字符(根据位置之前/之后)。

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

如此多的人_放置了许多字符。

有关更多详细信息,请阅读此处

编辑

如果你想..

行返回QuickJump,即使它们不在一起然后搜索:

%快速%跳跃%

于 2013-05-17T06:51:27.997 回答