2012-12-11 2 views
7

SQL Server에서 일괄 처리. 표에는 여러 가지 사례가 포함 된 텍스트가 포함되어 있습니다. 대소 문자를 구분하여 대소 문자를 구분하여 ORDER BY에있는 COLLATE이 그렇게 할 것이라고 생각했습니다. 그렇지 않습니다. 왜? ORDER BY ... 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 

두 쿼리

은 첫 번째는 대소 문자를 구분

aaa1 
AAB2 
aba3 

가 (첫 번째 경우에, 나는 AAB2, aaa1, aba3을 원하는)

내 서버 인은 "CS"경우에도, 같은 반환 SQL Server Express 2008 (10.0.5500) 및 기본 서버 데이터 정렬은 Latin1_General_CI_AS입니다.

데이터베이스의 데이터 정렬은 Latin1_General_CI_AS입니다.

Latin1_General_CS_AS 대신 SQL_Latin1_General_CP1_CS_AS을 사용하면 결과가 동일하게 유지됩니다.

답변

8

A-Z으로 정렬하려는 원하는 정렬 순서에 대해 이진 데이터 정렬이 필요합니다. a-z 앞에 정렬하십시오. 그 정확한 대소 문자를 구분 데이터 정렬 정렬 순서이기 때문에

SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_bin 

CS 데이터 정렬 aAbB ... zZ