2010-08-20 32 views
1

我的計算機運行的查詢是我無法使用ORDER升序排列數據BY ASC

select accountid from general order by accountid ASC 

結果我得到的是排序

accountid 
------------ 
1 
1001 
1002 
10021 
10026 
1006 
1007 

爲什麼不正確排序?這是一個簡單的查詢,我完全失去了如何解決這個問題。

+3

我沒有SQL的人,但如果ACCOUNTID是一個字符串類型,那不是排序升序排列?這種類型是不是你認爲它是什麼? – linuxuser27 2010-08-20 03:27:47

+1

從理論上講,你可以在選擇列表和order-by子句中使用CAST(accountid AS INTEGER)'來獲得你想要的數字順序。但這會因'1008A'而失敗。 – 2010-08-20 03:35:31

回答

11

列的類型必須是數字(intnumberbigint等)鍵入..

貌似現在它是一個VARCHAR類型列......這是排序像一本字典...

+1

如果你不能改變列的類型,你可以通過TO_NUMBER(ACCOUNT_ID)(這也許是很慢)命令 – Thilo 2010-08-20 03:28:33

+0

是它的VARCHAR,但爲什麼它表現這樣我們就不能進行排序VARCHAR類型 – farkhunda 2010-08-20 03:28:33

+4

@farkhunda列。如果對varchar進行排序,它將按照字符串排序(不是數字),並且顯示的結果是結果 – Thilo 2010-08-20 03:29:54

0

如果SolutionID是VARCHAR列,如果它有一個像SOL0,SOL1,SOL2,有些事情.... 那麼,如果你有對列進行排序...用下面的代碼

cast (substring(SolutionID,4,10) as integer) desc

0

試試這個,它的工作原理:

select accountid from general order by convert(int, accountid) ASC