Вы можете заказать по номерам как
SELECT Str
FROM
(
VALUES
('ItemCode-1'),
('ItemCode-10'),
('ItemCode-2'),
('ItemCode-20')
) T(Str)
ORDER BY CAST(RIGHT(Str, LEN(Str) - CHARINDEX('-', Str)) AS INT)
Примечание. Поскольку вы пометили свой Q тегом SQL Server 2008
, вы должны обновить его как можно скорее, поскольку он не поддерживается.
ОБНОВЛЕНИЕ:
Так как вы не предоставляете хорошие данные выборки, я просто предполагаю. Вот еще один способ удовлетворить ваши требования
SELECT Str
FROM
(
VALUES
('ItemCode-1'),
('ItemCode-10'),
('ItemCode-2'),
('ItemCode-20'),
('Item-Code')
) T(Str)
ORDER BY CASE WHEN Str LIKE '%[0-9]' THEN CAST(RIGHT(Str, LEN(Str) - CHARINDEX('-', Str)) AS INT) ELSE 0 END