0

我需要按nvarchar列排序。问题是该列没有相同的条目模式,该列的某些行的示例是

12    
9     
TEF      
78F    
T2R

如何按 order By 子句对该列进行排序?我唯一感到欣慰的是,此列仅包含数字和字母数字字符。

4

3 回答 3

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

所以

9
12
78F
T2R
TEF 

变成

            9
           12
          78F
          T2R
          TEF 

哪个会正确排序

你不能依赖 ISNUMERIC

于 2010-12-09T11:39:56.417 回答
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
于 2010-12-09T11:39:40.930 回答
0

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

本文介绍了一种方法:

如何在 SQL Server 中对包含数字的 VARCHAR 列进行排序?

来自文章:

select MyColumn
from MyTable
order by 
    case IsNumeric(MyColumn) 
        when 1 then Replicate(Char(0), 100 - Len(MyColumn)) + MyColumn
        else MyColumn
    end
于 2010-12-09T11:34:53.497 回答