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

Sql 按字典顺序选择最接近的匹配项,sql,sqlite,Sql,Sqlite,供应商:我有一张表格,上面有字典里的单词: Word --- cat dog giraffe zebra 我想找到一个单词,如果它不存在,那么它前面最近的一个单词,例如,aardvark将不返回任何内容,cat将返回cat,cow将返回cat,horse将返回giraffe 使用BTREE索引进行搜索应该相对简单,但我还没有找到一种方法。我使用sqlite实现这一点,但其他引擎也是可以接受的 我只对字典顺序感兴趣,也就是说,查询应该与上面的示例完全一致。其他相似性指标当然不错,但与这个问题无关

供应商:我有一张表格,上面有字典里的单词:

Word
---
cat
dog
giraffe
zebra
我想找到一个单词,如果它不存在,那么它前面最近的一个单词,例如,
aardvark
将不返回任何内容,
cat
将返回
cat
cow
将返回
cat
horse
将返回
giraffe

使用BTREE索引进行搜索应该相对简单,但我还没有找到一种方法。我使用sqlite实现这一点,但其他引擎也是可以接受的

我只对字典顺序感兴趣,也就是说,查询应该与上面的示例完全一致。其他相似性指标当然不错,但与这个问题无关。

这可能会对您有所帮助

select a.word,b.word from dictionary a, words b
where difference (a.word,'DOG')  in(3,4)
或者您可以使用
soundex
功能

进行近似匹配

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

假设您已使用正确的for dictionary顺序(可能是默认顺序,或
COLLATE NOCASE
,或用户定义的排序规则)声明了列,则获得精确匹配是很简单的:

SELECT Word FROM Dictionary WHERE Word = ?
而且,在之前获得最接近的距离很容易:

SELECT MAX(Word) FROM Dictionary WHERE Word < ?

这是一个近似值,但我需要精确的行为。谢谢,这回答了我的问题。您知道您的第二个查询是否可以对单词使用一些索引以使其性能良好吗?要了解是否正在使用索引,请使用。
SELECT Word FROM Dictionary WHERE Word = ?
UNION ALL
SELECT MAX(Word) FROM Dictionary WHERE Word < ?
LIMIT 1