我有一列通常只有数字(有时是字母,但这不重要)。
如何自然排序?
目前的排序方式是:{1、10、11、12、2、3、4、5、6、7、8、9}
我希望它按照以下方式排序:{1、2、3、4、5、6、7、8、9、10、11、12}
我有一列通常只有数字(有时是字母,但这不重要)。
如何自然排序?
目前的排序方式是:{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函数存在缺陷,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
您可以混合使用订单参数...
SELECT textval FROM tablename
WHERE IsNumeric(textval) = 1
ORDER BY CAST(textval as int)
此外,将数据类型转换为可以容纳最大值的数据类型。
如果您还需要结果集中的非数字,则只需在之前或之后附加一个UNION查询,其中IsNumeric = 0(按任何顺序排序)即可。