2011-03-07 33 views
0

我想使用order by clause按照排序順序返回我的表的'id'列值,如'1,2,3,4 ..',但下面的查詢返回id的值順序 '1,10,100,101,102 ......'在SQL服務器中按順序混淆

select id from loginuser order by id; 

可我知道我能得到我的理想輸出?

回答

7

您的id列的類型爲varchar,請嘗試在order by子句中將其轉換爲int以獲得所需的結果。

+2

'SELECT ID FROM loginuser ORDER BY CAST(ID AS INTEGER)ASC;' – sled 2011-03-07 09:34:31

2

如果可能,您應該更改數據庫中的列類型。

0

添加到@格列柯的答案,這是一個很好的做法是向調用者公開排序順序。無論如何,使用ORDER BY子句中的表達式違反了SQL標準。因此,考慮這個選擇:

SELECT id, CAST(id AS INTEGER) AS sort_col 
    FROM loginuser 
ORDER 
    BY sort_col; 
+0

@marc_s:「通常情況下,你不能當在同一查詢引入參考一列別名.. ..你真的測試過這個嗎?我懷疑它會運行....「 - 你完全*錯誤的方式。 SQL-92規範聲明,你只能*引用'ORDER BY'子句中的「別名」(或'as子句')。你有疑問?那麼,爲什麼你不測試它呢? ;) – onedaywhen 2011-03-07 13:59:40