类别:

字符串和二进制函数

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 函数不会更改字符串。第三列中复制的字符串为小写,就像第一列中的原始字符串为小写一样。但是,COLLATE 返回的值的排序规则规范已从“sp”更改为“sp-upper”;您可以在第四列中看到这一点。

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

此命令使用德语排序规则对结果进行排序。

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
语言: 中文