- 类别:
COLLATE¶
返回原始字符串的副本,但此副本具有指定的 collation_specification
属性,而不是原始的 collation_specification
属性。
此副本可用于后续字符串比较,这将使用新的 collation_specification
。
语法¶
COLLATE 函数可以作为普通函数调用:
COLLATE(<string_expression>, '<collation_specification>')
COLLATE 函数可以像中缀运算符一样使用:
<string_expression> COLLATE '<collation_specification>'
实参¶
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 ('ñ');
此示例说明 COLLATE 函数不会更改字符串。第三列中复制的字符串为小写,就像第一列中的原始字符串为小写一样。但是,COLLATE 返回的值的排序规则规范已从 es
更改为 es-ci
。
SELECT v,
COLLATION(v),
COLLATE(v, 'es-ci'),
COLLATION(COLLATE(v, 'es-ci'))
FROM collation1;
+---+--------------+---------------------+--------------------------------+
| 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;
+---+--------------------------+--------------------------+---------------------+---------------------------+
| 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');
以下两个查询返回相同的结果。第一个使用 COLLATE 作为函数;第二个使用 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';