SQL通配符匹配部分值

时间:2015-10-18 02:27:07

标签: sql sqlite

在表格中我存储了人名,我想使用通配符来检查是否找到了学生姓名的一部分。我尝试使用通配符,如果条件值长度比数据库中已有的值短,例如

,则可以使用
WHERE name LIKE '%Stu%'

我有一个名叫'Stuart'的人,这将会返回一行,但是如果说我错过了输入学生的姓名并且它比存储的更长,即:

WHERE name LIKE '%Stuarfd%'

在那里我将得不到任何结果。反正只有匹配字符串的一部分吗?

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用SOUNDEX?

WHERE SOUNDEX(name) = SOUNDEX('Stuarf')

更多信息:

https://www.sqlite.org/lang_corefunc.html#soundex

答案 1 :(得分:0)

你可能想要的是Levenshtein距离,也称为编辑距离。这是将一个字符串更改为另一个字符串所需的编辑次数。

SQLite通过名为Spellfix1的扩展实现此功能,该扩展可用here。特定功能是spellfix1_editdist ()。 Levenshtein距离对于部分匹配并不是那么有用。我们的想法是能够输入" Stuarf"并找到" Stuart",因为他们很接近。