カテゴリ:

文字列とバイナリ関数

COLLATE

元の文字列のコピーを返しますが、元の collation_specification プロパティではなく、指定された collation_specification プロパティを使用します。

このコピーは、後続の文字列比較で使用でき、新しい collation_specification が使用されます。

構文

COLLATE 関数は、通常の関数として呼び出すことができます。

COLLATE(<string_expression>, '<collation_specification>')
Copy

COLLATE 関数は、中置演算子であるかのように使用できます。

<string_expression> COLLATE '<collation_specification>'
Copy

引数

string_expression

コピーする文字列。

collation_specification

文字列のコピーとともに保存する照合。照合指定子の詳細については、 照合順序仕様 をご参照ください。

戻り値

元の文字列のコピーを返しますが、元の collation_specification ではなく、指定された collation_specification プロパティを使用します。

使用上の注意

  • 各 VARCHAR には、その VARCHAR を別の VARCHAR と比較するときに使用する照合指定子を保持するプロパティが含まれています。COLLATE 関数は文字列をコピーしますが、元の仕様ではなく新しい照合仕様をコピーに適用します。

    文字列自体は変更されず、文字列に関連付けられた照合指定子のみが変更されます。

  • COLLATE が中置演算子として使用される場合、 collation_specification は一般式ではなく定数文字列でなければなりません。

次の例は、 COLLATE 関数を呼び出すと、異なる照合仕様の文字列のコピーが返されることを示しています。

テーブルを作成して行を挿入します。挿入された行の値の照合仕様は es (スペイン語)です。

CREATE OR REPLACE TABLE collation1 (v VARCHAR COLLATE 'es');
INSERT INTO collation1 (v) VALUES ('ñ');
Copy

この例は COLLATE 関数が文字列を変更しないことを示しています。3列目のコピーされた文字列は小文字で、1列目の元の文字列と同じです。ただし、 COLLATE が返す値の照合仕様は、 es から es-ci に変更されました。

SELECT v,
       COLLATION(v),
       COLLATE(v, 'es-ci'),
       COLLATION(COLLATE(v, 'es-ci'))
  FROM collation1;
Copy
+---+--------------+---------------------+--------------------------------+
| V | COLLATION(V) | COLLATE(V, 'ES-CI') | COLLATION(COLLATE(V, 'ES-CI')) |
|---+--------------+---------------------+--------------------------------|
| ñ | es           | ñ                   | es-ci                          |
+---+--------------+---------------------+--------------------------------+

この例は、 COLLATE によって返される値はまだ小文字の文字列ですが、その文字列を別の文字列と比較する場合は ci の照合指定子が使用されることを示しています。

SELECT v,
       v = 'ñ' AS "COMPARISON TO LOWER CASE",
       v = 'Ñ' AS "COMPARISON TO UPPER CASE",
       COLLATE(v, 'es-ci'),
       COLLATE(v, 'es-ci') = 'Ñ'
  FROM collation1;
Copy
+---+--------------------------+--------------------------+---------------------+---------------------------+
| V | COMPARISON TO LOWER CASE | COMPARISON TO UPPER CASE | COLLATE(V, 'ES-CI') | COLLATE(V, 'ES-CI') = 'Ñ' |
|---+--------------------------+--------------------------+---------------------+---------------------------|
| ñ | True                     | False                    | ñ                   | True                      |
+---+--------------------------+--------------------------+---------------------+---------------------------+

この例では、ドイツ語の照合を使って結果をソートしています。

SELECT *
  FROM t1
  ORDER BY COLLATE(col1 , 'de');
Copy

次の2つのクエリは同じ結果を返します。1つ目は COLLATE を関数として使用します。2つ目は、中置演算子として COLLATE を使用します。

SELECT spanish_phrase FROM collation_demo 
  ORDER BY COLLATE(spanish_phrase, 'utf8');
Copy
SELECT spanish_phrase FROM collation_demo 
  ORDER BY spanish_phrase COLLATE 'utf8';
Copy