sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2008 - řazení podle řetězců s číselným číslem

Můžete to udělat pomocí funkce PATINDEX() jako níže:

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

Ukázka SQL Fiddle

Pokud máte čísla uprostřed řetězce, musíte vytvořit malou uživatelsky definovanou funkci pro získání čísla z řetězce a seřadit data na základě tohoto čísla, jak je uvedeno níže:

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

Data můžete třídit podle:

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


  1. Dynamické maskování dat v SQL Server pro začátečníky

  2. PHP PDO:znaková sada, názvy sad?

  3. Flushing Single Cursor

  4. Jak zašifrovat uživatelem definovanou funkci na serveru SQL Server