カテゴリ:

文字列とバイナリ関数

COLLATE

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

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

構文

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

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

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

<string_expression> COLLATE '<collation_specification>'
Copy

引数

string_expression

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

collation_specification

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

戻り値

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

使用上の注意

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

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

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

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

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

これは、 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                          |
+---+--------------+------------------------+-----------------------------------+
Copy

このクエリは、 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                         |
+---+--------------------------+--------------------------+------------------------+------------------------------+
Copy

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

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