カテゴリ:

文字列とバイナリ関数

COLLATE

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

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

構文

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

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

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

<string_expression> COLLATE '<collation_specification>'

引数

文字列式

コピーを作成する文字列です。

照合仕様

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

戻り値

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

使用上の注意

VARCHAR には、その VARCHAR を別の VARCHAR と比較するときに使用する照合指定子を保持するプロパティが含まれています。 COLLATE 関数は文字列をコピーしますが、元の仕様ではなく新しい照合仕様をコピーに入れます。文字列自体は変更されず、文字列に関連付けられた照合指定子のみが変更されます。

COLLATE が挿入演算子として使用される場合、 照合仕様 は一般式ではなく定数文字列でなければなりません。

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

テーブルを作成し、行を挿入します。挿入された行の値の照合指定は「sp」(スペイン語)です。

CREATE TABLE collation1 (v VARCHAR COLLATE 'sp');
INSERT INTO collation1 (v) VALUES ('ñ');

これは、 COLLATE 関数が文字列を変更しないことを示しています。1列目の元の文字列が小文字であるように、3列目のコピーされた文字列は小文字です。ただし、 COLLATE によって返される値の照合仕様は、「sp」から「sp-upper」に変更されました。これは4列目に表示されます。

SELECT v,
       COLLATION(v),
       COLLATE(v, 'sp-upper'),
       COLLATION(COLLATE(v, 'sp-upper'))
    FROM collation1;
+---+--------------+------------------------+-----------------------------------+
| V | COLLATION(V) | COLLATE(V, 'SP-UPPER') | COLLATION(COLLATE(V, 'SP-UPPER')) |
|---+--------------+------------------------+-----------------------------------|
| ñ | sp           | ñ                      | sp-upper                          |
+---+--------------+------------------------+-----------------------------------+

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

SELECT v,
       v = 'ñ' AS "COMPARISON TO LOWER CASE",
       v = 'Ñ' AS "COMPARISON TO UPPER CASE",
       COLLATE(v, 'sp-upper'),
       COLLATE(v, 'sp-upper') = 'Ñ'
    FROM collation1;
+---+--------------------------+--------------------------+------------------------+------------------------------+
| V | COMPARISON TO LOWER CASE | COMPARISON TO UPPER CASE | COLLATE(V, 'SP-UPPER') | COLLATE(V, 'SP-UPPER') = 'Ñ' |
|---+--------------------------+--------------------------+------------------------+------------------------------|
| ñ | True                     | False                    | ñ                      | True                         |
+---+--------------------------+--------------------------+------------------------+------------------------------+

このコマンドは、ドイツ語(Deutsch)照合を使用して結果をソートします。

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

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

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