2010-03-05 37 views
2

也許這是一個非常幼稚的問題。 我可以以這種方式訂購記錄,以數字開頭的值到記錄的末尾嗎? 例如,這些都在數據庫中的值:sql按名稱排序,數字在末尾

1 
Bill 
Andrew 

在此把與查詢:

Andrew 
Bill 
1 
+0

什麼類型的系統?如果您使用的是MSSQL Server中的整理技巧,則可以使用一些整潔的技巧。否則,工會會做你所需要的。 – 2012-06-20 14:05:58

回答

0

沒有,很多人將去年底只有當你將選擇降序排序 - 當字母變成「z..a」。您可能應該執行兩個查詢 - 按字母和數字 - 以及聯合結果。

3
ORDER BY -ISNUMERIC(a), a 
+0

我做了一些類似於此的可能*開始*的數字,但不是完全數字的列:'ORDER BY ISNUMERIC(LEFT(a,1)),a' - 在我的情況下(SQL Server 2000)它正確排序當我離開ISNUMERIC積極的結果。 – 2011-04-26 21:29:22

+0

這會損害性能,因爲每個項目都需要找到需要排序的數字。它可以通過各種方式來完成適當的分類,但所有應用都會遇到性能問題。 – 2012-06-20 14:04:19

0

一個解決方案可以通過子句中使用您的訂單上兩列 - 不對應於真正的DB列第一位的,但基於一些計算:被什麼東西

  • 首先,爲了使給出了數字
    • 這將所有的字符串推到結果集的開頭
  • 而且,T 1串,和2母雞,爲了通過列的內容


像這樣(大多是僞代碼)的東西可能會有所幫助:

select * 
from your_table 
where ... 
order by case when your_column >= '0' and your_column <= '9' then 2 else 1 end, 
    your_column 

通過將確保數字順序的第一部分被置於非後 - 數字;第二部分只是做一個正常的排序。


注:我想可以修改條件來使用函數來確定your_column是否包含字符串或數字;也許有某種is_number函數,由您的數據庫系統提供?