代码之家  ›  专栏  ›  技术社区  ›  Malfist

SQL Server的自然排序?

  •  8
  • Malfist  · 技术社区  · 14 年前

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

    我怎样才能使它自然的排序?

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

    3 回复  |  直到 14 年前
        1
  •  8
  •   Malfist    14 年前

    IsNumeric为“breaked”,IsNumeric(CHAR(13))返回1,强制转换将失败。

    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
    

    您可以混合顺序参数。。。

        2
  •  2
  •   ktharsis    14 年前

    投吧。另外,不要忘了使用IsNumeric来确保只返回数字(如果数字中包含字母,这很重要;)。

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

    另外,强制转换为将包含最大值的数据类型。

        3
  •  -3
  •   Bruie    14 年前

    'OrderBy ColumnName Asc'

    在查询结束时。