sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server 2008 - rækkefølge efter strenge med nummer numerisk

Du kan gøre det ved at bruge PATINDEX()-funktionen som nedenfor :

select * from Test 
order by CAST(SUBSTRING(Name + '0', PATINDEX('%[0-9]%', Name + '0'), LEN(Name + '0')) AS INT)

SQL Fiddle Demo

Hvis du har tal i midten af ​​strengen, skal du oprette en lille brugerdefineret funktion for at få tal fra streng og sortere data baseret på det tal som nedenfor:

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

Du kan sortere data efter:

select Name from Test order by dbo.fnGetNumberFromString(Name), Name


  1. Hvordan indstiller du en standardværdi for en MySQL Datetime-kolonne?

  2. Sådan opretter du tabelindekser i databaser

  3. Hvordan kan jeg ændre en primær nøglebegrænsning ved hjælp af SQL-syntaks?

  4. SQL Server 2012 Service Pack 1 og kumulativ opdatering 1