Числовой порядок по varchar - PullRequest
0 голосов
/ 02 октября 2018

Эй, ребята, я пытаюсь отсортировать мою колонку varchar.Я почти закончил с этим, но я не могу найти решение, чтобы сделать следующее:

-999, -998, 0, 8A, 80, 80A, 90, A80, ADBA

На данный момент это (см. Код): -998, -999, 0, 8A, 80, 80A, 90, A80, ADBA

Мне нужно только исправить отрицательные значения.У кого-нибудь есть решение этой проблемы?

 SELECT RANK_NUMBER FROM SHIPMENT_EVENT
    ORDER BY CASE WHEN ISNUMERIC(RANK_NUMBER) = 1 THEN RIGHT('0000000000' + RANK_NUMBER, 10) ELSE CASE 
                 WHEN LEFT(RANK_NUMBER, 1) LIKE '[0-9]' THEN RIGHT( 
                 '0000000000' 
                     + LEFT(SUBSTRING(RANK_NUMBER, PATINDEX('%[0-9.-]%', RANK_NUMBER 
                 ), 80 
                 ), 
                 PATINDEX 
                 ('%[^0-9.-]%', SUBSTRING(RANK_NUMBER, PATINDEX('%[0-9.-]%', 
                 RANK_NUMBER), 
                 80 
                 ) + 'X') -1), 10) 
                 ELSE RANK_NUMBER 
               END 
           END

1 Ответ

0 голосов
/ 02 октября 2018

Я бы ожидал что-то вроде:

order by cast(left(col, patindex('%[^-0-9]%', col + 'x') - 1) as decimal(20, 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...