中の技術日誌
 ホーム / 上へ

SQL:SQL Server 2005で追加されたbin2照合順序

2005/10/15

この文書はWindows XP Professional + SQL Server 2005 CTP Sep/2005 での情報です。

SQL Server 2005でbin2照合順序というのが追加されました。

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ja/instsql9/html/0511195f-16dc-4334-adde-ff5e5e7f6c9f.htm

#ネット上の情報が公開され次第リンクは変更します。

まずは実験として以下のSQLを実行してみてください。

set  nocount on
--テストテーブル作成

declare @tab table(
  UnicodeNo int primary key,
  UnicodeChar nchar(1),
  binorder int,
  bin2order int
)
--テストデータ作成

declare @loop int
set @loop = 0
while ( @loop < 65536 )
begin
    insert into @tab(unicodeno, unicodechar) values(@loop, nchar(@loop))
    set @loop = @loop + 1
end
--JapaneseBinCollateでカーソルを開く

declare @UnicodeNo int
Declare CursorJapaneseBin Cursor for  select UnicodeNo from @tab order by UnicodeChar collate japanese_90_bin
OPEN CursorJapaneseBin

set @loop = 0
FETCH NEXT FROM CursorJapaneseBin into @UnicodeNo
WHILE @@FETCH_STATUS = 0
BEGIN
  -- This is executed as long as the previous fetch succeeds.

  update @tab set binorder = @loop from @tab where UnicodeNo = @UnicodeNo 
  FETCH NEXT FROM CursorJapaneseBin into @UnicodeNo
  set @loop = @loop + 1
END

CLOSE CursorJapaneseBin
DEALLOCATE CursorJapaneseBin

------------------------------------


Declare CursorJapaneseBin2 Cursor for select UnicodeNo from @tab order by UnicodeChar collate japanese_90_bin2
OPEN CursorJapaneseBin2

set @loop = 0
FETCH NEXT FROM CursorJapaneseBin2 into @UnicodeNo
WHILE @@FETCH_STATUS = 0
BEGIN
  -- This is executed as long as the previous fetch succeeds.

  update @tab set bin2order = @loop from @tab where UnicodeNo = @UnicodeNo 
  FETCH NEXT FROM CursorJapaneseBin2 into @UnicodeNo
  set @loop = @loop + 1
END

select * from @tab where binorder <> bin2order

以上のSQLを実行するとJapanese_90_binとJapanese_90_bin2という新しいbin2照合順序を利用したソート順序の違いを洗い出してくれます。

UnicodeNoUnicodeCharbinorderbin2order
010
121
232
343
454
565
676
787
898
9  09
10  1110
11  1211
12  1312
13  1413
141514
151615
161716
171817
181918
191019
202120
212221
222322
232423
242524
252625
262726
272827
282928
292029
303130
313231
32  032

このように従来のBin照合順序にはSpaceを1番最初に持ってくるという問題があったことがわかります。

SQL Server 2005でバイナリ照合順序を検討する場合にはbin2を利用すべきだと思われます。

like検索での問題もありJapanese_90_Bin2照合順序が(残念ながら)大本命と成ると思います。

 


勉強会: 01/12 大阪#5, 02/03 東京#4 , 02/10 大阪#6 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告