我有一列通常只有数字(有时是字母,但这不重要)。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