Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server 2008 - Sortieren nach Zeichenfolgen mit numerischer Nummer

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