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) 定义