【问题标题】:Sorting a string numerically in SQL Server在 SQL Server 中对字符串进行数字排序
【发布时间】:2014-07-28 06:16:08
【问题描述】:

我在表格中有一个用字符串填充的列

level 1, level 2, level 3 ... level 12.

我希望按此列排序,但不按字母顺序排序,因为此列排序

1 10 11 12 2 3 4 5 6 7 8 9

尽管它是字符串类型,我如何才能以正确的数字顺序排列此列?

我想我必须只提取字符串的数字部分并将其转换为int,但我不知道如何在 SQL Server 中执行此操作。

谢谢

【问题讨论】:

    标签: sql-server tsql sorting sql-order-by natural-sort


    【解决方案1】:

    试试这个:

    Select *
    From YourTable
    Order by CAST( SUBSTRING(YourColumn, 6,LEN(YourColumn)) AS Int)
    

    【讨论】:

      【解决方案2】:

      试试这个:

      SELECT    *
      FROM      TableName
      ORDER BY  CAST(REPLACE(ColumnName, 'level', '') AS INT)
      

      【讨论】:

        【解决方案3】:

        试试这样的:

        SELECT col
        FROM
          (values('level 1'),('level 2'),('level 3'),
          ('level 5'),('level 8'),('level 10'),('level 12')) 
            x(col)
        ORDER BY stuff(col, 1,6, '') + 0
        

        这些东西会删除前 6 个字符,+0 会将 col 的其余部分转换为整数(也可以通过 cast 或 convert 完成)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-13
          • 1970-01-01
          相关资源
          最近更新 更多