Bạn có thể làm điều đó bằng cách sử dụng hàm PATINDEX () như bên dưới:
select * from Test
order by CAST(SUBSTRING(Name + '0', PATINDEX('%[0-9]%', Name + '0'), LEN(Name + '0')) AS INT)
Bản trình diễn SQL Fiddle
Nếu bạn có các số ở giữa chuỗi thì bạn cần tạo một hàm nhỏ do người dùng xác định để lấy số từ chuỗi và sắp xếp dữ liệu dựa trên số đó như bên dưới:
CREATE FUNCTION dbo.fnGetNumberFromString (@strInput VARCHAR(255))
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @intNumber int
SET @intNumber = PATINDEX('%[^0-9]%', @strInput)
WHILE @intNumber > 0
BEGIN
SET @strInput = STUFF(@strInput, @intNumber, 1, '')
SET @intNumber = PATINDEX('%[^0-9]%', @strInput)
END
RETURN ISNULL(@strInput,0)
END
GO
Bạn có thể sắp xếp dữ liệu theo:
select Name from Test order by dbo.fnGetNumberFromString(Name), Name