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

Sắp xếp chữ và số

Đây là một mẹo:Bất cứ khi nào bạn gặp vấn đề với việc sắp xếp, hãy thêm thứ tự theo các mục vào mệnh đề đã chọn của bạn. điều này sẽ cho phép bạn xem liệu những gì bạn đang sắp xếp có thực sự là những gì bạn muốn sắp xếp theo hay không:

SELECT Section,
        CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
          LEFT(Section,PATINDEX('%[0-9]%',Section)-1)
        ELSE 
          Section
        END As alphabetical_sort, -- alphabetical sort
        CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
          CAST(SUBSTRING(Section,PATINDEX('%[0-9]%',Section),LEN(Section)) as float)
        ELSE
          NULL
        END As Numeric_Sort
FROM dbo.Section
ORDER BY alphabetical_sort, Numeric_Sort

Sau khi tôi đã sắp xếp chính xác, Tất cả những gì tôi phải làm là chuyển các câu lệnh trường hợp sang mệnh đề theo thứ tự:

SELECT Section
FROM dbo.Section
ORDER BY 
    CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
        LEFT(Section,PATINDEX('%[0-9]%',Section)-1)
    ELSE 
        Section
    END , -- Alphabetical sort
    CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
        CAST(SUBSTRING(Section,PATINDEX('%[0-9]%',Section),LEN(Section)) as float)
    ELSE
        NULL
    END  -- Numeric sort

Về cơ bản, Bạn gặp 4 vấn đề chính:

  • Biểu thức sắp xếp theo thứ tự bảng chữ cái của bạn giả định rằng mọi hàng đều có số.
  • Biểu thức sắp xếp theo thứ tự bảng chữ cái của bạn chứa các số cũng như văn bản.
  • Biểu thức sắp xếp số của bạn có cả giá trị số và bảng chữ cái.
  • Vì điều 3, bạn không thể chuyển biểu thức sắp xếp số của mình sang kiểu số và đây là lý do tại sao bạn sẽ nhận được một loại chuỗi.

Xem sql fiddle này



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tách giá trị một cột thành nhiều giá trị cột?

  2. Học máy có ý nghĩa như thế nào đối với các chuyên gia cơ sở dữ liệu

  3. giao tiếp MATLAB SQL Server

  4. Làm cách nào để tạo tập lệnh cho tất cả các bảng có một nét trong SQL Server 2000?

  5. SQL Server Query Time Out