Как правильно сортировать буквенно-цифровые символы в SQL Server 2000 - PullRequest
0 голосов
/ 10 декабря 2008

MS SQL Server 2000

У меня есть столбец в Таблице А, который называется Имя. Я хочу отсортировать поле Имя. Многие, но не все записи для начала имени будут KL и сопровождаются числом (KL 1234, KL 2, KL 323 и т. Д.).

Таблица A

Имя

Способный
Bravo
KL 2
KL 323
KL 1234
Zebra

Если я использую

Select Name from A 
Order by Name

Я получаю

Возможность
Bravo
KL 1234
KL 2
KL 323
Зебра

хочу

Способный
Bravo
KL 2
KL 323
KL 1234
Зебра

Если бы они все начинали с KL, я мог бы использовать

Select Name from A
Order by cast(replace(name, 'KL', '') as big int)

но это приводит к ошибке "unble to cast name as big int" для значений, которые не начинаются с KL

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 10 декабря 2008

Попробуйте это:

Order By 
    Case When Left(name, 2) = 'KL' 
        Then 'KL' + Replace(Str(Cast(replace(name, 'KL', '') as BigInt), 12), ' ', '0')
        Else name End
0 голосов
/ 10 декабря 2008
ORDER BY 
    CASE WHEN CHARINDEX(' ', name)=0 THEN name 
        ELSE LEFT(name, CHARINDEX(' ', name)) END,
    CASE WHEN CHARINDEX(' ', name)=0 THEN 0
        ELSE CONVERT(BIGINT, 
            SUBSTRING(name, CHARINDEX(' ', name)+1, LEN(name))) END

обновлено неверное закрытие) после комментария

...