- 类别:
COLLATE¶
返回原始字符串的副本,但此副本具有指定的 collation_specification
属性,而不是原始的 collation_specification
属性。
此副本可用于后续字符串比较,这将使用新的 collation_specification
。
语法¶
COLLATE
函数可以作为普通函数调用:
COLLATE(<string_expression>, '<collation_specification>')
COLLATE
函数可以像 INFIX 运算符一样使用:
<string_expression> COLLATE '<collation_specification>'
实参¶
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 ('ñ');这表明
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 | +---+--------------+------------------------+-----------------------------------+
此查询显示,尽管 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 | +---+--------------------------+--------------------------+------------------------+------------------------------+
此命令使用德语排序规则对结果进行排序。
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';