类别:

字符串和二进制函数

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 函数不会更改字符串。第三列中复制的字符串为小写,就像第一列中的原始字符串为小写一样。但是,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

以下两个查询返回相同的结果。第一个使用 COLLATE 作为函数;第二个使用 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
语言: 中文