我在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
希望你能告诉我解决这个问题的方法。非常感谢!
答案 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,”);