SQL - 获取N个单词中的2个匹配的记录

时间:2014-02-06 20:35:12

标签: sql stored-procedures full-text-search where

我们有一个SQL Server 2008数据库表:公司

公司名称可能很复杂,如 St。查尔斯有限公司/临终关怀中心

如果提供的名称符合两个条件:

  • 由3个或更多单词组成
  • 至少三个字是4个字符更长

然后该名称将被清理,并传递给我的SQL SP。

清除名称涉及删除非字母字符,以及INC,CORP,LTD,LLC,CO等缩写。

使用上面的示例,我的SP将收到: Charles Hospice Center

我的目标是使用SQL返回任何匹配

的记录
Charles Center
Center Hospice
Hospice Charles
Charles Hospice
Hospice Center

我可以手动拆分每个单词.....

WHERE Name like '%Charles%Center%' or 
      Name like '%Center%Charles%' or
      Name like '%Hospice%Charles%' 
   etc.. etc.. etc..

但是如果提供了4个单词,那么我写出了24个组合......并且认为可能有一个更简单的方法,或者甚至已经有类似这样的SQL函数了?


** 编辑 **

全文搜索(来自某些在线阅读)似乎是一个很好的解决方案。我只是不确定如何指定2个X字必须匹配...或者真正如何正确使用它。例子很棒!

1 个答案:

答案 0 :(得分:1)

您可以使用

之类的字符串函数
where (CHARINDEX('Charles', Name) > 0 and CHARINDEX('Center', Name) > 0)
OR
(CHARINDEX('Hospice', Name) > 0 and CHARINDEX('Center', Name) > 0)
OR
(CHARINDEX('Hospice', Name) > 0 and CHARINDEX('Charles', Name) > 0)

<强>(OR)

根据@gordon的建议,您可以使用全文搜索。

使用CONTAINS (Transact-SQL)之类的

where contains(Name,' Charles AND Center ')
OR
contains(Name,' Charles AND Hospice ')
OR
contains(Name,' Hospice AND Center ')

<强>(OR)

使用FREETEXT (Transact-SQL)之类的

where FREETEXT(Name,' "Charles and Center')
    OR
    FREETEXT(Name,' Charles AND Hospice ')
    OR
    FREETEXT(Name,' Hospice AND Center ')

containsfreetext的两种情况下,它都假定您的Name列为full-text indexed

希望这有帮助。