我有一列通常只有數字(有時是字母,但這不重要)。SQL Server的自然排序?
我怎樣才能使它自然排序?
目前排序是這樣的:{} 1,10,11,12,2,3,4,5,6,7,8,9
我希望它有點像這樣:{1,2 ,3,4,5,6,7,8,9,10,11,12}
我有一列通常只有數字(有時是字母,但這不重要)。SQL Server的自然排序?
我怎樣才能使它自然排序?
目前排序是這樣的:{} 1,10,11,12,2,3,4,5,6,7,8,9
我希望它有點像這樣:{1,2 ,3,4,5,6,7,8,9,10,11,12}
IsNumeric is「broken」,ISNUMERIC(CHAR(13))返回1,CAST將失敗。
使用ISNUMERIC(textval +'e0')。最終代碼:
ORDER BY
PropertyName,
CASE ISNUMERIC(MixedField + 'e0') WHEN 1 THEN 0 ELSE 1 END, -- letters after numbers
CASE ISNUMERIC(MixedField + 'e0') WHEN 1 THEN CAST(MixedField AS INT) ELSE 0 END,
MixedField
你可以混合命令參數...
投它。此外,不要忘記使用IsNumeric來確保只返回數字(如果它們包含字母,則很重要;)。
SELECT textval FROM tablename
WHERE IsNumeric(textval) = 1
ORDER BY CAST(textval as int)
此外,轉換爲將保存最大值的數據類型。
如果您還需要結果集中的非數字,那麼只需在其之前或之後追加一個UNION查詢,其中IsNumeric = 0(按您想要的順序排列)。
聯盟的問題是,這種排序不是第一級排序。第一類是屬性名稱,這種類型是通過單元號(通常是數字,但可能是A,B,C,...)聯盟會拋出很多 – Malfist 2010-07-01 15:13:12
幾乎在那裏,它不排序非數字它只是將它們無情地添加到最後。我會修改你的查詢並接受它 – Malfist 2010-07-01 15:30:42