Пара решений, которые должны дать вам то, что вы ищете:
ORDER BY TRY_CONVERT(int,RIGHT(COL_NAME, NULLIF(CHARINDEX('*',REVERSE(COL_NAME)),0) -1)) DESC;
ORDER BY TRY_CONVERT(int, STUFF(COL_NAME, 1, NULLIF(CHARINDEX('*', COL_NAME),0),'')) DESC;
NULLIF
решает проблему, если нет '*'
, так как CHARINDEX
вернет 0
. Тогда вы не закончите передачу неверного (отрицательного) значения в функцию RIGHT
, как NULL - 1 = NULL
.
Моим личным предпочтением было бы использование STUFF
, так как REVERSE
довольно дорогая функция.