如何在 Postgresql select 查询中找到所有相对重音?
How to find all relative accent in Postgresql select query?
我有一个 table 名为 联系人
id | name
----+------------------
44 | Aarón
我正在尝试执行查询:
select id,name from contacts where name ilike 'Aaro%';
它return(0 rows)
我正在尝试搜索“o”,并且还希望结果包含“o”的所有口音,例如“ó'。
正如我做了一些谷歌搜索和 stackoverlfowing 我发现使用语言环境我需要安装排序规则。
所以我通过
在linux中安装了排序规则
sudo locale-gen --no-archive de_DE.utf-8
之后我尝试在 postgresql 数据库中安装排序规则。
create collation de (LOCALE='de_DE.utf-8');
排序规则生成成功。我试图通过使用 select * from pg_collation 列出此排序规则;它就在那里。
完成所有这些后,我再次尝试通过查询获得所有相对口音的结果 'o':
select id,name from contacts where name ilike 'Aaro%';
但我又得到了 (0 rows)
最终我想要记录 "Aarón" 当我执行上面的查询时。
提前致谢。
您可以使用 postgres 的 unaccent 模块。
为此,您需要在系统中安装 postgresql-contrib。您可以在基于 linux.
的 debian 中使用以下命令安装它
sudo apt-get install postgresql-contrib
之后你可以在 postgres 中创建 unaccent。
postgres_db=# create EXTENSION unaccent;
CREATE EXTENSION
postgres_db=# select name from test where unaccent(name) ilike 'Aaro%';
name
-------
Aarón
(1 row)
希望对您有所帮助!
扩展 unaccent 是一个很好的解决方案。如果你处理一小组没有连字的字符,你也可以使用一个简单的函数,比如这个用于波兰语的函数:
create or replace function unaccent_pl(text)
returns text language sql immutable as $$
select translate(, 'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ', 'acelnoszzACELNOSZZ')
$$;
select unaccent_pl('Zażółć gęślą jaźń');
unaccent_pl
-------------------
Zazolc gesla jazn
(1 row)
我有一个 table 名为 联系人
id | name
----+------------------
44 | Aarón
我正在尝试执行查询:
select id,name from contacts where name ilike 'Aaro%';
它return(0 rows)
我正在尝试搜索“o”,并且还希望结果包含“o”的所有口音,例如“ó'。 正如我做了一些谷歌搜索和 stackoverlfowing 我发现使用语言环境我需要安装排序规则。 所以我通过
在linux中安装了排序规则sudo locale-gen --no-archive de_DE.utf-8
之后我尝试在 postgresql 数据库中安装排序规则。
create collation de (LOCALE='de_DE.utf-8');
排序规则生成成功。我试图通过使用 select * from pg_collation 列出此排序规则;它就在那里。
完成所有这些后,我再次尝试通过查询获得所有相对口音的结果 'o':
select id,name from contacts where name ilike 'Aaro%';
但我又得到了 (0 rows)
最终我想要记录 "Aarón" 当我执行上面的查询时。
提前致谢。
您可以使用 postgres 的 unaccent 模块。
为此,您需要在系统中安装 postgresql-contrib。您可以在基于 linux.
的 debian 中使用以下命令安装它sudo apt-get install postgresql-contrib
之后你可以在 postgres 中创建 unaccent。
postgres_db=# create EXTENSION unaccent;
CREATE EXTENSION
postgres_db=# select name from test where unaccent(name) ilike 'Aaro%';
name
-------
Aarón
(1 row)
希望对您有所帮助!
扩展 unaccent 是一个很好的解决方案。如果你处理一小组没有连字的字符,你也可以使用一个简单的函数,比如这个用于波兰语的函数:
create or replace function unaccent_pl(text)
returns text language sql immutable as $$
select translate(, 'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ', 'acelnoszzACELNOSZZ')
$$;
select unaccent_pl('Zażółć gęślą jaźń');
unaccent_pl
-------------------
Zazolc gesla jazn
(1 row)