Microsoft SQL Server 提供“不区分重音符号”的排序规则,允许执行类似 SELECT * FROM users WHERE name LIKE 'João'
的查询,以检索名称为“Joao”的行。
PostgreSQL 提供 unaccent 模块,该模块可去除字符串中的变音符号。要使用它,请安装扩展并使用 unaccent()
函数:
SELECT * FROM users WHERE unaccent(name) = unaccent('João');
为了加快查询速度,请创建表达式索引:
CREATE INDEX users_unaccent_name_idx ON users(unaccent(name));
请记住为安全起见限定函数和字典的模式:
CREATE OR REPLACE FUNCTION public.f_unaccent(text) RETURNS text LANGUAGE sql IMMUTABLE PARALLEL SAFE STRICT AS $func$ SELECT public.immutable_unaccent('public.unaccent', ) -- 限定函数和字典的模式 $func$; CREATE INDEX users_unaccent_name_idx ON users(public.f_unaccent(name));
在 PostgreSQL 9.6 及更高版本中,unaccent()
会正确展开连字,将“Œ”转换为“OE”,将“ß”转换为“ss”。
将 unaccent
与 pg_trgm
模块结合使用,可以使用 LIKE
或 ILIKE
进行任意模式匹配,并创建一个三元组 GIN 或 GIST 表达式索引。
为简便起见,请考虑对左锚定模式使用三元组索引。
以上是如何在 PostgreSQL 中执行不区分重音的查询?的详细内容。更多信息请关注PHP中文网其他相关文章!