sql >> Database >  >> RDS >> Sqlserver

SQL Server 2008 - volgorde op tekenreeksen met numeriek nummer

U kunt het doen met de PATINDEX()-functie zoals hieronder:

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

SQL Fiddle-demo

Als u getallen in het midden van de tekenreeks hebt, moet u een kleine, door de gebruiker gedefinieerde functie maken om het nummer uit de tekenreeks te halen en gegevens te sorteren op basis van dat nummer, zoals hieronder:

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

U kunt gegevens sorteren op:

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


  1. Hoe kan ik een .sql-bestand importeren in mijn Heroku postgres-database?

  2. RStudio gebruiken met een niet-systeemversie van de unixODBC Driver Manager

  3. Converteer eenvoudig uw Microsoft Access-query's met deze nieuwe tool!

  4. Leer hoe u de CASE-instructie in SQL kunt gebruiken