KDOC 655: 式の照合順序を変えて並び替えの結果を変える
この文書のステータス
- 作成
- 2026-10-11 貴島
- レビュー
- 2026-10-11 貴島
概要
データベースシステムが並び替えや文字区別をする場合、データベースは入力の照合順序(collation)を使用する。
たとえば同じ文字列を並び替えても、どの照合順序(並び替えの規則)を使うかで結果が変わる。
SHOW server_encoding; -- コードポイントの値の順 SELECT string_agg(x, ' ' ORDER BY x COLLATE "C") AS c FROM (VALUES ('a'), ('B'), ('b'), ('A')) AS v(x); -- 言語の規則の順(ICU) SELECT string_agg(x, ' ' ORDER BY x COLLATE "und-x-icu") AS und_x_icu FROM (VALUES ('a'), ('B'), ('b'), ('A')) AS v(x);
| |
|-------------------------------------------------------------------------|
| > SHOW server_encoding; |
| server_encoding |
| UTF8 |
| |
| > SELECT string_agg(x, ' ' ORDER BY x COLLATE "C") AS c |
| > FROM (VALUES ('a'), ('B'), ('b'), ('A')) AS v(x); |
| c |
| A B a b |
| |
| > SELECT string_agg(x, ' ' ORDER BY x COLLATE "und-x-icu") AS und_x_icu |
| > FROM (VALUES ('a'), ('B'), ('b'), ('A')) AS v(x); |
| und_x_icu |
| a A b B |
概念的に照合可能なデータ型のそれぞれの式は、照合順序を保持しています (組み込みの照合可能なデータ型はtext、varchar、 charです。 ユーザ定義の基本型は照合可能とマーキングできます。もちろん照合可能なデータ型上のドメインは照合可能となります)。 もし、式が列参照である場合は、式の照合順序は列の定義された照合順序となります。 もし、式が定数である場合は、照合順序は定数のデータ型のデフォルトの照合順序となります。 より複雑な式の照合順序は、下記に示すように、その入力の照合順序から引き出されます。
(略)
データベースシステムが並べ替えや文字区別を行う場合、データベースは入力の照合順序を使用します。 これは、たとえばORDER BY句や < 演算子や関数を使用する際に発生します。 ORDER BY句に適用する照合順序は、単純にソートキーの照合順序です。 関数や演算子の呼び出しに対して適用される照合順序は、以下に述べるように引数により決まります。 比較演算子に加えて、照合順序はlower、upper、initcapといった小文字と大文字を変換する関数やパターンマッチングの演算子、to_char関連の関数で考慮されています。
関連
なし。