我正在努力搜索只出现在字符串中两个逗号之间的单词。
例如,在我的数据库中,我有以下数据:
------------------------------------------------------------------------
| 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#代码中单独进行搜索(虽然不是很优雅)。
我希望这是有道理的。任何帮助将不胜感激。
答案 0 :(得分:2)
如果您愿意在C#(这听起来像一个选项)中这样做,我认为您可以非常优雅地做到这一点。假设myRows
为IEnumerable<Row>
代表行的Row
,mySearchTerms
为IEnumerable<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
修改强>
如果你想......
返回 快速 和 跳转 的行,即使它们不在一起,也请搜索为:
<强>%快速%跳转%强>