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

T-Sql - Đặt hàng theo chữ và số

Giải pháp đơn giản nhất là đánh dấu trước các số 0

Select ...
From Table
Order By Right( '0000000000' + YourColumn, 10)

Tuy nhiên, điều này sẽ không tính đến các ký tự alpha. Để xử lý các ký tự alpha, thì bạn cần biết bạn có thể có bao nhiêu ký tự alpha tiềm năng. Nếu có, bạn có thể làm như sau:

Select ...
From #Test
Order By Case
    When IsNumeric(NumVal) = 1 Then Right('0000000000' + NumVal + '0', 10)
    Else Right('0000000000' + NumVal, 10)
    End

BỔ SUNG

Chạy thử nghiệm:

If object_id('tempdb..#Test') is not null
    Drop Table #Test

Create Table #Test ( NumVal varchar(10) )
Insert #Test(NumVal) Values('02')
Insert #Test(NumVal) Values('03')
Insert #Test(NumVal) Values('1a')
Insert #Test(NumVal) Values('1b')
Insert #Test(NumVal) Values('10')
Insert #Test(NumVal) Values('11')

Select NumVal
From #Test
Order By Case
    When IsNumeric(NumVal) = 1 Then Right('0000000000' + NumVal + '0', 10)
    Else Right('0000000000' + NumVal, 10)
    End

Results:
1a
1b
02
03
10
11

Một lưu ý về giải pháp của tôi. Nếu trong trường hợp (các) ký tự chữ cái có ý nghĩa đặc biệt, thì như Erick Robertson đã đề xuất, bạn nên chia nhỏ dữ liệu thành các cột riêng biệt. Giải pháp trên sẽ chỉ xử lý hai trường hợp rất cụ thể:một giá trị tất cả là số, một giá trị có một ký tự chữ cái ở cuối. Nếu dữ liệu có thể có nhiều ký tự chữ cái hoặc ký tự chữ cái đôi khi được định vị khác với phần cuối của giá trị, giải pháp của tôi sẽ không hoạt động. Ngoài ra, cần lưu ý rằng giải pháp của tôi sẽ thực hiện quét bảng để đánh giá chuỗi có thể đặt hàng trên mỗi giá trị.

Nếu những gì bạn tìm kiếm là một giải pháp nhanh chóng một lần, thì cách tiếp cận của tôi sẽ hiệu quả. Nếu bạn đang tìm kiếm một giải pháp lâu dài, thì hãy chia nhỏ dữ liệu thành các cột riêng biệt, chấp nhận thứ tự sắp xếp ngốc nghếch hoặc thêm một cột quy định thứ tự sắp xếp tương đối cho mỗi giá trị.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham số đầu ra máy chủ PHP Sql

  2. Ghi nhật ký ODBC, SQL Server

  3. pyodbc:Làm thế nào để thử lại để khôi phục từ lỗi Tạm thời?

  4. sp_send_dbmail được thực thi từ công việc không thành công với kết quả truy vấn được đính kèm dưới dạng tệp

  5. Trong SQL Server, làm cách nào tôi có thể tìm thấy ở mọi nơi một cột được tham chiếu?