Sie können dies mit der PATINDEX()-Funktion wie unten tun:
select * from Test
order by CAST(SUBSTRING(Name + '0', PATINDEX('%[0-9]%', Name + '0'), LEN(Name + '0')) AS INT)
SQL-Fiddle-Demo
Wenn Sie Zahlen in der Mitte der Zeichenfolge haben, müssen Sie eine kleine benutzerdefinierte Funktion erstellen, um die Zahl aus der Zeichenfolge zu erhalten und die Daten basierend auf dieser Zahl wie unten zu sortieren:
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
Sie können Daten sortieren nach:
select Name from Test order by dbo.fnGetNumberFromString(Name), Name