Gör strängfunktioner i din ORDER BY
för att bara ta bort numret. Något sådant här borde fungera:
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)
Detta tar först bort IS-
och kontrollera om resten av strängen är ett nummer. Om den är det kommer den att lämna decimalsiffrorna, annars tar den bort .
och följande alfatecken.
Detta förutsätter att din avsedda beställning i fallet med numeriska decimaler skulle vara:
IS-123.A
IS-123.1
IS-123.2
Om du inte bryr dig om vad som står efter decimalen/punkten, gör du helt enkelt:
ORDER BY CAST(LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1) AS NUMERIC)