按字典顺序选择最接近的匹配

时间:2015-01-20 06:52:44

标签: sql sqlite

支持我有一个包含字典中单词的fllowing表:

Word
---
cat
dog
giraffe
zebra

我想找一个单词,如果它不存在,则以dictionary顺序排在它前面,例如aardvark将不返回任何内容,cat将返回catcow将返回cathorse将返回giraffe

使用BTREE索引进行搜索应该相对简单,但我还没有想出办法。我为此使用sqlite,但其他引擎也可以接受。

我只对字典顺序感兴趣,即查询应与上述示例完全一致。其他相似性指标当然不错,但与此问题无关。

3 个答案:

答案 0 :(得分:1)

假设您已为字典顺序(可能是默认值,或COLLATE NOCASE或用户定义的排序规则)声明了具有正确collation的列,则获得完全匹配是微不足道的:

SELECT Word FROM Dictionary WHERE Word = ?

并且最接近之前很容易:

SELECT MAX(Word) FROM Dictionary WHERE Word < ?

要仅获取这两个查询的第一个结果,请将它们与UNION ALL结合使用,并使用LIMIT 1,以便在第一个查询成功时忽略第二个查询:

SELECT Word FROM Dictionary WHERE Word = ?
UNION ALL
SELECT MAX(Word) FROM Dictionary WHERE Word < ?
LIMIT 1

答案 1 :(得分:-1)

这可能有助于你

select a.word,b.word from dictionary a, words b
where difference (a.word,'DOG')  in(3,4)

或者您可以使用soundex功能

答案 2 :(得分:-1)

约匹配

select a.word,b.word from dictionary a, words b
where (b.word like '%'+right(a.word,2) )

或 完全匹配

select a.word,b.word from dictionary a, words b
where soundex(a.word)=soundex(b.word) or