SQL Server的自然排序?

时间:2010-07-01 14:50:34

标签: sql-server tsql natural-sort

我的列通常只有数字(有时是字母,但这并不重要)。

如何让它自然排序?

目前的排序如下:{1,10,11,12,2,3,4,5,6,7,8,9}

我希望它像这样排序:{1,2,3,4,5,6,7,8,9,10,11,12}

3 个答案:

答案 0 :(得分:7)

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

您可以混合订单参数......

答案 1 :(得分:2)

施展它。另外,不要忘记使用IsNumeric来确保只返回数字(如果它们包含重要的字母;)。

SELECT textval FROM tablename
WHERE IsNumeric(textval) = 1
ORDER BY CAST(textval as int)

此外,转换为将保留最大值的数据类型。

如果您也需要结果集中的非数字,那么只需在之前或之后附加一个UNION查询,其中IsNumeric = 0(按您想要的顺序排序)。

答案 2 :(得分:-3)

你绑定使用:

'OrderBy ColumnName Asc'

在您的查询结束时。