Thực hiện các hàm chuỗi trong ORDER BY
của bạn để chỉ xóa số. Một cái gì đó như thế này sẽ hoạt động:
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)
Điều này trước tiên sẽ xóa IS-
và kiểm tra xem phần còn lại của chuỗi có phải là số hay không. Nếu đúng, nó sẽ để lại các chữ số thập phân, nếu không, nó sẽ xóa .
và các ký tự alpha sau.
Điều này giả sử thứ tự dự định của bạn trong trường hợp chữ số thập phân sẽ là:
IS-123.A
IS-123.1
IS-123.2
Nếu bạn không quan tâm đến những gì sau dấu thập phân / dấu chấm, thì chỉ cần:
ORDER BY CAST(LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1) AS NUMERIC)