SQLite搜索喜欢

时间:2014-01-11 17:20:59

标签: sql sqlite search sql-like

我在SQLite中遇到了搜索问题。

示例我在SQLite中有一个列表名称

1. Hello USA
2. Hello Africa
3. Hello Asian
4. I Love Asian
5. I love My Africa
6. Asian
7. Africa
8. Country
9. Hello world

当我搜索'%A%'这样的名字时。结果如

1. Hello USA
2. Hello Africa
3. Hello Asian
4. I Love Asian
5. I love My Africa
6. Asian
7. Africa

但是我希望从第一个字符A开始的名字放在第一个

1. Asian
2. Africa
3. Hello Asian
4. Hello Africa
5. Hello USA
6. I Love Asian
7. I love My Africa

希望你能告诉我解决这个问题的方法。非常感谢!

3 个答案:

答案 0 :(得分:0)

您可以使用右侧order by

执行此操作
select t.*
from table t
where name like '%A%'
order by (case when name like 'A%' then 0
               when name like '% A%' then 1
               else 2 end),
         name

编辑:

如果您想通过 字母出现结果顺序,请执行以下操作:

order by instr(name, 'A')

编辑II:

如果您的SQLite没有instr(),那么您可以做一些相当痛苦的事情:

order by (case when substr(name, 1, 1) = 'A' then 1
               when substr(name, 2, 1) = 'A' then 2
               when substr(name, 3, 1) = 'A' then 3
               when substr(name, 4, 1) = 'A' then 4
               when substr(name, 5, 1) = 'A' then 5
               when substr(name, 6, 1) = 'A' then 6
               when substr(name, 7, 1) = 'A' then 7
               when substr(name, 8, 1) = 'A' then 8
               when substr(name, 9, 1) = 'A' then 9
               when substr(name, 10, 1) = 'A' then 10
               else 11
           end)

答案 1 :(得分:0)

您可以执行两个查询 - 一个没有前导%,另一个没有前导{{1}}。然后在程序中连接结果。

答案 2 :(得分:0)

您可以在订单中使用此条款 -

order by(name +“COLLATE NOCASE ASC,”);