我们有一个SQL Server 2008数据库表:公司
公司名称可能很复杂,如 St。查尔斯有限公司/临终关怀中心
如果提供的名称符合两个条件:
然后该名称将被清理,并传递给我的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字必须匹配...或者真正如何正确使用它。例子很棒!
答案 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的建议,您可以使用全文搜索。
where contains(Name,' Charles AND Center ')
OR
contains(Name,' Charles AND Hospice ')
OR
contains(Name,' Hospice AND Center ')
<强>(OR)强>
where FREETEXT(Name,' "Charles and Center')
OR
FREETEXT(Name,' Charles AND Hospice ')
OR
FREETEXT(Name,' Hospice AND Center ')
在contains
和freetext
的两种情况下,它都假定您的Name
列为full-text indexed
。
希望这有帮助。