SQLite类搜索

SQLite类搜索,sql,sqlite,search,sql-like,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 lo

我在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

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

您可以使用右侧的
按顺序执行此操作:

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')
编辑二:

如果您的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)

您可以执行两个查询—一个查询不带前导的
%
,另一个查询带前导的
%
。然后将结果连接到程序中。

您可以在order by子句中使用它-


订购人(姓名+“核对无酶ASC”)

这在一般情况下是行不通的
union
union all
不一定保留子查询中的行顺序。谢谢。我不知道,谢谢戈登。但是如果我想得到亚洲,亚洲,亚洲,亚洲,你好我的亚洲,你好我的亚洲..对不起戈登,麻烦你给我解释一下定位关键词。我用过,它抛出“无此功能:定位”@HuỳnhNgọcBang。道歉。SQLite中正确的函数是
instr()
——假设您使用的是最新版本()。:)我怎么了。我无法使用此命令instr()。SQLite抛出错误:没有这样的函数:instrOk@Gordon,非常感谢您的热情……)