Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2008 - подреждане по низове с числово число

Можете да го направите с помощта на функцията PATINDEX(), както е показано по-долу:

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

Демонстрация на SQL Fiddle

Ако имате числа в средата на низа, тогава трябва да създадете малка функция, дефинирана от потребителя, за да получите число от низ и да сортирате данни въз основа на това число, както е по-долу:

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

Можете да сортирате данните по:

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. SQL Server:Открийте стойността по подразбиране на колона със заявка

  2. Как да създадете ненулево ограничение за колона в таблица на SQL Server - SQL Server / T-SQL Урок, част 51

  3. Кога е по-добре да съхранявате флагове като битмаска, вместо да използвате асоциативна таблица?

  4. RODBC odbcDriverConnect() Грешка при свързване

  5. Какво е SQL Server? (Определение, версии, издания)