SQLite:订购,以便首先使用相同的起始字母的结果?

时间:2014-07-03 12:32:17

标签: sql sqlite

SQLite 3.7.11

鉴于我在SQLITE表中有这两个记录,其字段名为name
预览
查看

如果我运行查询:

SELECT * FROM table WHERE name LIKE "%" + $keyword + "%" ORDER BY name

将$ keyword设置为“ vi

我会按此顺序得到结果:
1)“预览”
2)“查看”

有没有办法订购,以便第一个字母与关键字的第一个字母相同的名称(在本例中为“v”)会先出现?

2 个答案:

答案 0 :(得分:2)

您可以按搜索字符串中关键字的位置进行排序

SELECT * FROM your_table
WHERE name LIKE concat('%', '$keyword', '%')
ORDER BY POSITION('$keyword' IN name)
         name

答案 1 :(得分:1)

不确定是否可以做得更简洁,但这应该有效。我使用?作为变量的占位符。您发布的查询似乎不是正确的SQL。

SELECT * FROM table1
WHERE name LIKE '%' || ? || '%'
ORDER BY (CASE WHEN SUBSTR(Name,1,1) = SUBSTR(?,1,1) THEN 0 ELSE 1 END), 
         name