casefold() 是一个系统函数,用于对提供的输入字符串执行基于排序规则的大小写折叠。
casefold() 在 PostgreSQL 18 中添加。
用法
casefold (text) →text
casefold() 只能在 服务器编码 为 UTF8 的数据库中使用。
大小写折叠 (Case folding)
大小写折叠 (Case folding) 类似于大小写转换 (case conversion),但大小写折叠的目的是为了方便进行不区分大小写的字符串匹配,而不是改变其大小写。
变更历史
- PostgreSQL 18
- 添加 (提交 bfc59920)
示例
casefold() 的基本用法示例
postgres=# SELECT casefold('STRAẞE Straße' COLLATE "en-x-icu");
casefold
-----------------
strasse strasse
(1 row)
在这里,德语单词 “Straße” 被分别用大写(包含大写的 ẞ)和标准形式(首字母大写)进行了书写,并通过 casefold() 函数转换成了两个相同的值,适用于比较,其中 ẞ/ß 都被折叠成了 ss。
使用具有相同排序规则的 lower() 函数,ẞ 和 ß 都会被折叠成 ß。
postgres=# SELECT lower('STRAẞE Straße' COLLATE "en-x-icu");
lower
---------------
straße straße
(1 row)
尝试在非 UTF8 数据库中使用 casefold()
postgres=# CREATE DATABASE iso8859 TEMPLATE template0 ENCODING 'iso-8859-1' LOCALE 'C';
CREATE DATABASE
postgres=# \c iso8859
You are now connected to database "iso8859" as user "postgres".
iso8859=# SELECT casefold('Ödnis');
ERROR: Unicode case folding can only be performed if server encoding is UTF8
参考资料
- PostgreSQL 文档: 其他字符串函数和运算符
有用链接
- 大小写映射和大小写折叠 - 万维网联盟 (W3C) 定义
