Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server 2008 - sắp xếp theo chuỗi với số

Bạn có thể làm điều đó bằng cách sử dụng hàm PATINDEX () như bên dưới:

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

Bản trình diễn SQL Fiddle

Nếu bạn có các số ở giữa chuỗi thì bạn cần tạo một hàm nhỏ do người dùng xác định để lấy số từ chuỗi và sắp xếp dữ liệu dựa trên số đó như bên dưới:

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

Bạn có thể sắp xếp dữ liệu theo:

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. máy chủ sql chọn hàng đầu tiên từ một nhóm

  2. Cách lấy tất cả các Bảng có hoặc không có Ràng buộc khóa chính trong Cơ sở dữ liệu máy chủ Sql - Hướng dẫn sử dụng SQL Server / TSQL 59

  3. Bảng danh sách máy chủ SQL:Cách hiển thị tất cả các bảng

  4. Phương thức xếp hạng các hàng trong SQL Server:ROW_NUMBER (), RANK (), DENSE_RANK () và NTILE ()

  5. Đổi tên một cột trong SQL Server (T-SQL)