2

パイプ文字を含む文字列で並べ替える場合、SQL サーバーは何か特別なことをしなければならないようです。

ascii('|') は、unicode('|') と同様に 124 を返します。

ascii('0') は 48 を返します

返品順 '|' 文字と数字の前の文字。

私は照合を調べようとしましたが、私が見た場合、「|」character の値は常に 124 です。

これが私のテスト選択です

select * from (
   select '0' as col1, ASCII('0') as col2, unicode('0') as col3
   union select '1' as col1, ASCII('1') as col2, unicode('1') as col3
   union select '|' as col1, ASCII('|') as col2, unicode('|') as col3
   union select 'a' as col1, ASCII('a') as col2, unicode('a') as col3
   union select ' ' as col1, ASCII(' ') as col2, unicode(' ') as col3
   union select '.' as col1, ASCII('.') as col2, unicode('.') as col3
   union select '/' as col1, ASCII('/') as col2, unicode('/') as col3

) as q
order by col1

このクエリは次を返します。

    col1  col2  col3
1           32    32
2      .    46    46
3      /    47    47
4      |   124   124
5      0    48    48
6      1    49    49
7      a    97    97

124 が 47 と 48 の間にあるのはなぜですか?

使用されている照合は SQL_Latin1_General_CP1_CI_AI です。

バイナリ照合のみが並べ替えに文字の ascii/unicode 値を使用する場合、この照合の文字の並べ替え順序を確認するにはどうすればよいですか?

4

2 に答える 2

3

照合順序が異なると、文字の比較順序が変わります。これらは、文字の ASCII コードまたは Unicode 値を変更しません。言い換えると、照合は、ASCII コードまたは Unicode 値によって単純に順序付けられることはほとんどありません。

于 2013-10-30T22:05:57.573 に答える
0

言及されたコメントと回答のいくつかのように、順序ごとの順序は照合によって決定されます。Unicode チャートでの文字の位置は、順序に影響します。

Unicode 照合アルゴリズムから 照合シーケンスは、以下で構成されるマルチレベル比較アルゴリズムに基づいています。

Base Characters
Accents
Case Variants
Punctuation
Identical Level

同一レベルは、2 つの文字列が同一である場合に同点を解消する方法に関する規則です。

これがどのように機能するかというルール以上に、特定の照合順序でどのような順序になるかを知りたいと思いました。特定の照合順序で文字の順序がどうなるかについてのドキュメントを見つけることができませんでしたが、クエリを使用して表示できます。

SELECT CHAR(number) 
FROM master..spt_values 
WHERE type='P' AND number BETWEEN 0 AND 255 
ORDER BY CHAR(number) COLLATE SQL_Latin1_General_CP1_CI_AI
于 2013-11-07T02:49:19.017 に答える