2012-12-21 65 views
3

我似乎無法找到一個答案之一:mysql命令通過特定的字符串

說我有一個表像這樣:

ID Name 
------------------------ 
1 AAAAAAAAA 
2 ABAAAAAAA 
3 BBAAAAAAA 
4 CDAAAAAAA 
5 BBAAAAAAA 

有沒有一種方法,我可以通過name訂購 - 但是 - 比如從BB啓動順序,讓它環回輪(而不是從AZ,從BBBA去)

最終的結果則是:

3 BBAAAAAAA 
5 BBAAAAAAA 
4 CDAAAAAAA 
1 AAAAAAAAA 
2 ABAAAAAAA 

這有道理嗎?

回答

3

如果你想在BB出現在開始的時候你可以使用:

select * 
from yourtable 
order by case when substring(name, 1, 2) = 'BB' then 0 else 1 end 

SQL Fiddle with Demo

如果你想CD出現第二個,然後使用:

select * 
from yourtable 
order by 
    case 
    when substring(name, 1, 2) = 'BB' then 0 
    when substring(name, 1, 2) = 'CD' then 1 
    else 2 end, name 

SQL Fiddle with Demo

結果爲第二個查詢:

| ID |  NAME | 
------------------ 
| 3 | BBAAAAAAA | 
| 5 | BBAAAAAAA | 
| 4 | CDAAAAAAA | 
| 1 | AAAAAAAAA | 
| 2 | ABAAAAAAA | 
+0

'ORDER BY子串(姓名,1,2)= 'BB' DESC'也應該工作 - 是否有任何關於這個不好的做法,是'什麼時候'首選? *更新:*隨着你的更新,使用'case'更有意義。沒關係。 :-) – h2ooooooo

+0

@ h2ooooooo如果他們只有一個'按順序',那麼你可以'按順序排列',但如果你有幾個特定的​​訂單,那麼你可以使用'case' – Taryn

+0

這實際上是我需要的完美 - 謝謝!我會盡快接受。 – BenOfTheNorth

0

這將姓名順序的所有行。它會先將按名稱排序行>= 'BB',再行< 'BB'也按名稱排序,進行循環,你想要的方式:

select * 
from your_table 
order by name<'BB', name 
相關問題