Порядок сортировки по столбцу NVARCHAR в SQL Server - PullRequest
0 голосов
/ 09 декабря 2010

Мне нужно сделать заказ на столбец nvarchar.Проблема в том, что столбец не имеет одинакового шаблона ввода, например, некоторые строки столбца:

12    
9     
TEF      
78F    
T2R

Как отсортировать этот столбец по порядку По предложению?Единственное облегчение, которое у меня есть, это то, что этот столбец содержит только цифры и буквенно-цифровые символы.

Ответы [ 3 ]

4 голосов
/ 09 декабря 2010
ORDER BY
   RIGHT(REPLICATE(N' ', 500) + MyValue, 500)

So

9
12
78F
T2R
TEF 

становится

            9
           12
          78F
          T2R
          TEF 

Который будет сортировать правильно

Нельзя полагаться на ISNUMERIC

2 голосов
/ 09 декабря 2010
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
0 голосов
/ 09 декабря 2010

Я предполагаю, что вы выпускаете из-за неправильной сортировки чисел и текста.

Эта статья объясняет один из подходов:

Как отсортировать столбец VARCHAR вSQL-сервер, содержащий цифры?

Из статьи:

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