Как правильно сортировать буквенно-цифровые символы в SQL Server 2000

MS SQL Server 2000

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

Таблица А

имя

Able
Bravo
KL 2
KL 323
KL 1234
Зебра

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

Select Name from A 
Order by Name

я получил

Able
Bravo
KL 1234
KL 2
KL 323
Зебра

я хочу

Able
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

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

10.12.2008 15:52:45
2 ОТВЕТА
РЕШЕНИЕ

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

Order By 
    Case When Left(name, 2) = 'KL' 
        Then 'KL' + Replace(Str(Cast(replace(name, 'KL', '') as BigInt), 12), ' ', '0')
        Else name End
1
10.12.2008 16:13:21
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

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

0
10.12.2008 17:51:35
Я получил ошибку «Функция подстроки требует 3 аргумента» с этим. Я не играл с этим, хотя, поскольку я только видел, работало ли это из коробки. Мне нравится этот подход, так как он выглядит более общим и будет работать независимо от того, какой префикс. Спасибо.
user45042 10.12.2008 16:38:37