解决方案 »

  1.   


    当然是 order by。只不过需要两个,例如,首先按前两个字符排序,然后才按所有字符排序。
      

  2.   

    order by replace(column,'-','')?
      

  3.   

    如果仅是这些数据,那么直接写一个order by 当然可以。但是我估计lz的题目根本没记住人家问什么,这里的问题描述是不完整的。笔试不会出这么简单的题目。
      

  4.   

    --你的原题,可直接排序
    DECLARE @t TABLE ( n VARCHAR(10) )
    INSERT INTO @t 
    SELECT '13-1' union
    SELECT '13-2' union
    SELECT '13-4' union
    SELECT '13-7' union
    SELECT '13-3' union
    SELECT '14-1' union
    SELECT '13-8' union
    SELECT '14-2' union
    SELECT '13-9'SELECT * FROM @t ORDER BY n
    /*
    13-1
    13-2
    13-3
    13-4
    13-7
    13-8
    13-9
    14-1
    14-2
    * */
      

  5.   

    --前后两半部分的位数都不一致的情况下如何排序
    DECLARE @t TABLE ( n VARCHAR(10) )
    INSERT INTO @t 
    SELECT '13-1' union
    SELECT '13-2' union
    SELECT '13-4' union
    SELECT '13-7' union
    SELECT '13-3' union
    SELECT '14-1' union
    SELECT '13-8' union
    SELECT '14-2' union
    SELECT '13-9' UNION
    SELECT '1-1' union
    select '2-1' union
    select '4-10' union 
    select '4-101'SELECT n,
    SUBSTRING(n,1,CHARINDEX('-',n)-1) AS 前半部分,
    SUBSTRING(n,CHARINDEX('-',n)+1,LEN(n)-CHARINDEX('-',n)) AS 后半部分
    FROM @t ORDER BY
    --取出前半部分,并转为INT再排序
    CONVERT(INT,SUBSTRING(n,1,CHARINDEX('-',n)-1)),
    --取出后半部分,并转为INT再排序
    CONVERT(INT,SUBSTRING(n,CHARINDEX('-',n)+1,LEN(n)-CHARINDEX('-',n)))