パイプ文字を含む文字列で並べ替える場合、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 値を使用する場合、この照合の文字の並べ替え順序を確認するにはどうすればよいですか?