Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2008 - uporządkuj według ciągów z liczbą liczbową

Możesz to zrobić za pomocą funkcji PATINDEX() jak poniżej :

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

Pokaz SQL Fiddle

Jeśli masz liczby w środku ciągu, musisz utworzyć małą funkcję zdefiniowaną przez użytkownika, aby pobrać liczbę z ciągu i posortować dane na podstawie tej liczby, jak poniżej:

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

Możesz sortować dane według:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj milisekundy UTC na DATETIME w serwerze SQL

  2. EXISTS vs JOIN i użycie klauzuli EXISTS

  3. Jakie są różnice między przekształceniami Merge Join i Lookup w usługach SSIS?

  4. Wybór N wierszy w SQL Server

  5. Przykłady konwersji „daty” na „przesunięcie daty” w SQL Server (T-SQL)