你可以很容易地匹配足夠按鍵的數量:
select *,
case when Contains(Column, 'key1') then 1 else 0 end +
case when Contains(Column, 'key2') then 1 else 0 end +
case when Contains(Column, 'key3') then 1 else 0 end as [NumberOfMatchingKeys]
from Table1
where Contains(column, 'key1 OR key2 OR key3')
你不能得到什麼,至少很容易,對於任何給定鍵匹配的數量。發現key2匹配7次是個問題。
一種可能的優化是從where
子句除去Contains
:
select * from (
select *,
case when Contains(Column, 'key1') then 1 else 0 end +
case when Contains(Column, 'key2') then 1 else 0 end +
case when Contains(Column, 'key3') then 1 else 0 end as [NumberOfMatchingKeys]
from Table1) as Louise
where NumberOfMatchingKeys > 0
'選擇*,情況下,當含有(關鍵字, 'KEY1'),則1否則爲0端爲[密鑰1],殼體包含當(keyword,'key2')then 1 else 0 end as [Key2],當Contains(keyword,'key3')then 1 else 0 end as [Key3],case when Contains(keyword,'background')then 1 else 0結束,因爲table1中的[MatchingKeys]給了我任何鍵的匹配數。您的優化解決方案也很好。我可能會用它,如果我不需要給每個成功匹配的鍵賦予加權等級。我已經編輯了您的解決方案以包含我的解決方案 – thunderbird 2013-05-04 20:30:54
stackoverflow同儕審查sucks ..如果您希望您可以編輯您的帖子以包括我的解決方案以及。 – thunderbird 2013-05-04 20:33:25
@thunderbird - 如果您更改正在添加到2(1,2,4,...)冪的'1',那麼總和將是一個位掩碼,指示哪些鍵(如果有的話)匹配。您可以對零進行簡單測試以查看是否有匹配,或者'BitMask&4> 0'來查看第三個鍵是否匹配。組合也是可能的,例如,如果前三個鍵中的任何一個匹配,則'BitMask&7> 0'爲真。 – HABO 2013-05-04 20:51:45