Bạn muốn một phương tiện hợp lý, hiệu quả để sắp xếp các số trong chuỗi là số thực? Xem xét bỏ phiếu cho đề xuất Microsoft Connect của tôi: Hỗ trợ "sắp xếp tự nhiên" / DIGITSASNUMBERS làm tùy chọn Đối chiếu
Mặc dù Câu hỏi này dành riêng cho SQL Server và Câu trả lời này thì không, tôi cảm thấy rằng tôi vẫn nên đăng thông tin này đơn giản để nâng cao nhận thức về nó và không phản đối bất kỳ câu trả lời nào khác.
Điều đó đang được nói, bên ngoài SQL Server, trong một số môi trường nhất định có thể thực hiện kiểu sắp xếp này. Đó là một cái gì đó ít nhất được chỉ định trong tài liệu Unicode. Trong NGÔN NGỮ DỮ LIỆU DỮ LIỆU DỮ LIỆU (LDML) UNICODE PHẦN 5: Tiêu chuẩn / báo cáo THU , có một biểu đồ cho Cài đặt đối chiếu mô tả các tùy chọn khác nhau để điều chỉnh hành vi sắp xếp. Một trong các tùy chọn là -kn-true
hoặc [numericOrdering on]
:
Nếu được đặt thành bật , bất kỳ chuỗi Số thập phân nào (General_Carget = Nd trong [ UAX44 ]) được sắp xếp ở cấp chính với giá trị số của nó. Ví dụ: "A-21" <"A-123". Các trọng số chính được tính toán là tất cả khi bắt đầu nhóm sắp xếp lại chữ số . Do đó, với bảng UCA chưa được bảo vệ, "a $" <"a0" <"a2" <"a12" <"a⓪" <"aa".
Tuy nhiên, tài liệu này là "tiêu chuẩn kỹ thuật" và không phải là một phần của đặc tả Unicode cốt lõi. Một ghi chú ở đầu tài liệu nêu rõ:
Tiêu chuẩn kỹ thuật Unicode (UTS) là một đặc điểm kỹ thuật độc lập. Sự phù hợp với Tiêu chuẩn Unicode không bao hàm sự phù hợp với bất kỳ UTS nào.
Do đó, hành vi cụ thể này không có sẵn trong SQL Server hoặc thậm chí trong .NET (ít nhất là không nguyên bản), mặc dù cả hai đều tuân thủ đặc tả Unicode cốt lõi.
các ICU dự án (Components International cho Unicode) là một tập hợp của C / C ++ và Java thư viện mà cụ chức năng này, và thậm chí còn có một bản demo trực tuyến của nó. Và trong "các dự án liên quan", có một liên kết đến một dự án .NET dường như là một trình bao bọc đối tượng COM cho thư viện ICU cho phép chức năng này được hiển thị với mã được quản lý. Nhưng không rõ dự án .NET đó có còn hoạt động không.
Nhưng để thấy hành vi này hoạt động, hãy đến ICU Collation Demo .
Dán phần sau vào vùng văn bản Nhập ở phía bên trái:
1
2
10B
6
11
10A
3
10
Đặt tất cả các tùy chọn thành "mặc định". Kiểm tra tùy chọn "số dòng đầu vào" ở bên phải củasort nút và đảm bảo rằng tùy chọn "độ mạnh khác biệt" không được kiểm tra.
Nhấp vào sortnút và bạn sẽ nhận lại được những điều sau đây:
[1] 1
[8] 10
[6] 10A
[3] 10B
[5] 11
[2] 2
[7] 3
[4] 6
Đây là những gì nên được mong đợi khi thực hiện sắp xếp chuỗi điển hình và những gì bạn đang thấy trong SQL Server.
Bây giờ, trong loạt các nút radio ngay phía trên sortnút, hàng thứ hai được gắn nhãn "số". Chọn nút radio "bật".
Nhấp vào sortnút một lần nữa và bạn sẽ nhận lại như sau:
[1] 1
[2] 2
[7] 3
[4] 6
[8] 10
[6] 10A
[3] 10B
[5] 11
Câu hỏi nếu điều này hoạt động khi phần số ở giữa chuỗi? Ok, dán phần sau vào vùng văn bản Nhập ở bên trái (thay thế danh sách trước):
Script - 1.sql
Script - 2.sql
Script - 10B.sql
Script - 6.sql
Script - 11.sql
Script - 10A.sql
Script - 3.sql
Script - 10.sql
Đảm bảo rằng cài đặt số vẫn được đặt thành "bật". Nhấp vào sortnút một lần nữa và bạn sẽ nhận lại như sau:
[1] Script - 1.sql
[2] Script - 2.sql
[7] Script - 3.sql
[4] Script - 6.sql
[8] Script - 10.sql
[6] Script - 10A.sql
[3] Script - 10B.sql
[5] Script - 11.sql
Bạn muốn thấy điều này ở một nơi khác? Tạo một thư mục trên ổ cứng của bạn, một cái gì đó như C: \ temp \ sorting \ và tạo các tệp trống có cùng tên "Script -...". Thực hiện DIR
trong một cửa sổ lệnh và bạn sẽ thấy sắp xếp tiêu chuẩn. Nhưng khi nhìn vào danh sách các tệp trong Windows Explorer, bạn sẽ thấy danh sách được sắp xếp bằng tùy chọn "số" :-).