SQL Server中的NVARCHAR列的“按条目排序”

时间:2010-12-09 11:18:35

标签: sql-server sql-server-2005 sql-order-by nvarchar

我需要为nvarchar列生成订单。问题在于该列没有相同的条目模式,列的某些行的示例是

12    
9     
TEF      
78F    
T2R

如何按order By子句对此列进行排序?我唯一的解脱是这个列只包含数字和字母数字字符。

3 个答案:

答案 0 :(得分:4)

ORDER BY
   RIGHT(REPLICATE(N' ', 500) + MyValue, 500)

所以

9
12
78F
T2R
TEF 

变为

            9
           12
          78F
          T2R
          TEF 

哪个会正确排序

你不能依赖ISNUMERIC

答案 1 :(得分:2)

select
    *
from
    table
order by
    CASE
       WHEN not column like '%[^0-9]%' THEN CONVERT(int,column)
       WHEN column like '[0-9]%' THEN CONVERT(int,SUBSTRING(column,1,PATINDEX('%[A-Z]%',column)-1))
    END,
    CASE
       WHEN not column like '%[^0-9]%' THEN NULL
       WHEN column like '[0-9]%' THEN SUBSTRING(column,PATINDEX('%[A-Z]%',column),9000)
       ELSE column
    END

答案 2 :(得分:0)

我猜你发的是它没有正确排序数字和文本。

本文解释了一种方法:

How do I sort a VARCHAR column in SQL server that contains numbers?

来自文章:

select MyColumn
from MyTable
order by 
    case IsNumeric(MyColumn) 
        when 1 then Replicate(Char(0), 100 - Len(MyColumn)) + MyColumn
        else MyColumn
    end