SQLite如何查找与输入字符串最长匹配前缀的表行?
解决SQLite最长前缀匹配问题
直接用以下SQL语句就能实现需求:
SELECT StringBeginning, Score FROM beginnings WHERE 'ABC_Michael_A_V1.3_Update' LIKE StringBeginning || '%' ORDER BY LENGTH(StringBeginning) DESC LIMIT 1;
逻辑说明
- 匹配条件:
'输入字符串' LIKE StringBeginning || '%'用来筛选所有能作为输入字符串前缀的StringBeginning——||是SQLite的字符串拼接符,StringBeginning || '%'表示以该前缀开头的任意字符串,输入字符串满足这个模式即说明前缀匹配。- 如果需要区分大小写的匹配,把
LIKE换成GLOB即可:'ABC_Michael_A_V1.3_Update' GLOB StringBeginning || '*'
- 如果需要区分大小写的匹配,把
- 排序取最长:用
LENGTH(StringBeginning)获取前缀长度,按降序排序后取第一行,就是匹配长度最长的结果。
特殊情况处理
如果存在多个长度相同的最长前缀,想优先取分数高的,可修改排序规则:
SELECT StringBeginning, Score FROM beginnings WHERE 'ABC_Michael_A_V1.3_Update' LIKE StringBeginning || '%' ORDER BY LENGTH(StringBeginning) DESC, Score DESC LIMIT 1;
内容的提问来源于stack exchange,提问作者sharkyenergy
相关产品推荐
相关产品推荐

