2015-03-20 17 views
5

Tôi biết đã muộn, nhưng những gì đang xảy ra ở đây? Tôi mong đợi không có kết quả như dấu chấm phẩy đưa ra sau khi 9 trong ASCII:So sánh chuỗi máy chủ sql

select ascii(';') as semicolon, ascii('9') as nine where ';' < '9' 

Kết quả:

semicolon nine 
59   57 

Trả lời

6

Sắp xếp và so sánh các dữ liệu nhân vật trong SQL Server được xác định bởi các điểm mã chỉ với collations nhị phân.

select ascii(';') as semicolon, ascii('9') as nine where ';' COLLATE Latin1_General_BIN < '9' COLLATE Latin1_General_BIN; 

Với collations khác, các quy tắc so sánh và sắp xếp thứ tự là thứ tự từ điển (ký tự đặc biệt trước khi alpha) không phụ thuộc vào thứ tự điểm mã nhị phân tiềm ẩn. Hơn nữa, Windows collations cũng tuân theo các quy tắc "sắp xếp từ" ngôn ngữ. Ví dụ:

SELECT 1 WHERE 'coop' COLLATE SQL_Latin1_General_CP1_CI_AS < 'co-op' COLLATE SQL_Latin1_General_CP1_CI_AS; 
SELECT 1 WHERE 'coop' COLLATE Latin1_General_CI_AS < 'co-op' COLLATE Latin1_General_CI_AS; 
+0

Cảm ơn Dan, tôi biết nó sẽ là một điều gì đó bí truyền như thế này. Đẫm máu khó hiểu và làm phiền nếu bạn hỏi tôi! –

+0

@JonHanlon, vâng, nó rất khó hiểu. Điều tốt bạn không hỏi về ngôn ngữ và các trang mã quá :-) –

2

Khi sử dụng < điều hành trên dây ISO, so sánh được thực hiện sử dụng thứ tự từ điển (tức là thứ tự bạn sẽ tìm thấy trong từ điển.)

http://en.wikipedia.org/wiki/Lexicographical_order

bạn sẽ cần phải sử dụng các chức năng trong ASCII() thứ e khoản WHERE cho trường hợp của bạn là đúng.

SELECT ASCII(';') AS semicolon, 
     ASCII('9') AS nine 
WHERE ASCII(';') < ASCII('9') 

http://sqlfiddle.com/#!6/9eecb/1264

+0

Ascii() chỉ cho thấy dấu chấm phẩy thực sự lớn hơn 9. Tôi chỉ muốn biết tại sao ';' <'9' ước tính là đúng. –

+0

Có, nhưng tại sao chuỗi so sánh sản lượng kết quả khác nhau? –

+0

Khi sử dụng toán tử '<' trên chuỗi ISO, phép so sánh được thực hiện theo thứ tự từ điển (tức là thứ tự bạn sẽ tìm thấy trong từ điển.) Tôi đã cập nhật câu trả lời của mình để bao gồm thông tin này. http://en.wikipedia.org/wiki/Lexicographical_order – Drenmi