2012-12-11 81 views
7

Trong SQL Server. Một bảng chứa một số văn bản với các trường hợp khác nhau. Tôi muốn sắp xếp chúng phân biệt chữ hoa chữ thường và nghĩ rằng một số COLLATE trong số ORDER BY sẽ làm điều đó. Nó không. Tại sao?ORDER BY ... COLLATE trong SQL Server

CREATE TABLE T1 (C1 VARCHAR(20)) 
INSERT INTO T1 (C1) VALUES ('aaa1'), ('AAB2'), ('aba3') 

SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_CS_AS 
SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_CI_AS 

Cả hai truy vấn trở lại giống nhau, ngay cả khi là người đầu tiên là "CS" cho case-sensitive

aaa1 
AAB2 
aba3 

(trong trường hợp đầu tiên, tôi muốn AAB2, aaa1, aba3)

Máy chủ của tôi là SQL Server Express 2008 (10.0.5500) và máy chủ mặc định của nó collation là Latin1_General_CI_AS.

Việc đối chiếu cơ sở dữ liệu là Latin1_General_CI_AS.

Kết quả vẫn giữ nguyên nếu tôi sử dụng SQL_Latin1_General_CP1_CS_AS thay cho Latin1_General_CS_AS.

Trả lời

8

Bạn cần một đối chiếu nhị phân cho thứ tự sắp xếp mong muốn của mình với A-Z được sắp xếp trước a-z.

SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_bin 

CS đối chiếu phân loại aAbB ... zZ