Wykonuj funkcje ciągów w swoim ORDER BY
usunąć tylko numer. Coś takiego powinno działać:
SELECT col
FROM table
ORDER BY CAST(CASE WHEN ISNUMERIC(SUBSTRING(col,4,20)) = 1
THEN SUBSTRING(col,4,20)
ELSE LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1)
END AS NUMERIC)
To najpierw usunie IS-
i sprawdź, czy reszta ciągu jest liczbą. Jeśli tak, pozostawi cyfry dziesiętne, w przeciwnym razie usunie .
oraz następujące znaki alfanumeryczne.
Zakładamy, że zamierzona kolejność w przypadku liczbowych miejsc po przecinku będzie wyglądać następująco:
IS-123.A
IS-123.1
IS-123.2
Jeśli nie obchodzi Cię, co jest po przecinku/kropce, po prostu:
ORDER BY CAST(LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1) AS NUMERIC)