Sort string as number in sql server

前端 未结 9 1488
不知归路
不知归路 2020-12-20 16:41

I have a column that contains data like this. dashes indicate multi copies of the same invoice and these have to be sorted in ascending order

790711
790109-1         


        
9条回答
  •  执念已碎
    2020-12-20 17:22

    Break the sort into two sections:

    SQL Fiddle

    MS SQL Server 2008 Schema Setup:

    CREATE TABLE TestData
    (
      data varchar(20)
    )
    
    INSERT TestData
    SELECT '790711' as data
    UNION
        SELECT '790109-1'
    UNION
        SELECT '790109-11'
    UNION 
        SELECT '790109-2'
    

    Query 1:

    SELECT *
    FROM TestData
    ORDER BY 
        FLOOR(CAST(REPLACE(data, '-', '.') AS FLOAT)),
        CASE WHEN CHARINDEX('-', data) > 0 
            THEN CAST(RIGHT(data, len(data) - CHARINDEX('-', data)) AS INT)
            ELSE 0 
        END
    

    Results:

    |      DATA |
    -------------
    |  790109-1 |
    |  790109-2 |
    | 790109-11 |
    |    790711 |
    

提交回复
热议问题