2012-12-11 9 views
7

SQL Serverの下。表には、さまざまなケースのテキストが含まれています。大文字と小文字を区別して並べ替えて、ORDER BYCOLLATEとすると思います。それはしません。どうして?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 

両方のクエリが

私のサーバである(最初のケースでは、私はAAB2, aaa1, aba3をしたい)最初のものは、大文字と小文字を区別し

aaa1 
AAB2 
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