2010-08-20 29 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