2014-01-11 48 views
0

我在SQLite中搜索時遇到了問題。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 

有當我搜索LIKE '%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

您可以用正確的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) 
+0

謝謝戈登。但如果我的結果像亞洲,亞洲,亞洲,亞洲,你好我的亞洲,你好我愛愛.. –

+0

我更新的例子上面 –

+0

對不起戈登,麻煩你向我解釋找到關鍵字。我用它,它拋出「沒有這樣的功能:找到」 –

0

你可以做兩個查詢 - 一個沒有領導%和第二它。然後連接程序中的結果。

+0

這一般不起作用。 union和union all都不會保留子查詢中行的順序。 –

+0

謝謝。我不知道。 – Gene

0

您可以通過子句中的順序使用 -

ORDER BY(名稱+ 「COLLATE NOCASE ASC」);