Можете да го направите с помощта на функцията PATINDEX(), както е показано по-долу:
select * from Test
order by CAST(SUBSTRING(Name + '0', PATINDEX('%[0-9]%', Name + '0'), LEN(Name + '0')) AS INT)
Демонстрация на SQL Fiddle
Ако имате числа в средата на низа, тогава трябва да създадете малка функция, дефинирана от потребителя, за да получите число от низ и да сортирате данни въз основа на това число, както е по-долу:
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
Можете да сортирате данните по:
select Name from Test order by dbo.fnGetNumberFromString(Name), Name