POSTGRESQL unaccent 不匹配带有 ñ 的单词

标签 postgresql

大家好,我有一个西类牙语医学术语数据库。假设表 description 有一个名为 term 的列。 如果我使用以下查询:

SELECT *
FROM description
WHERE unaccent(description.term) ILIKE '%sueño%';

结果集是空的,但我知道该表包含 ñ 项。例如,查询:

SELECT *
FROM description
WHERE description.term ILIKE '%sueño%';

确实会返回多个结果。

例如,我需要不带重音的扩展名来匹配 áa。 目前我正在使用这个解决方法,但我认为它效率不高:

SELECT *
FROM description
WHERE unaccent(description.term) ILIKE '%${CRITERIA}%' OR description.term ILIKE '%${CRITERIA}%';

谁能帮我理解为什么会这样?提前致谢!

最佳答案

这行不通:

SELECT *
FROM description
WHERE unaccent(description.term) ILIKE '%sueño%';

因为unaccent(description.term) 没有ñ。您正在使用 ILIKEñ 进行比较。如果“标准”要有重音符号,那么你应该在两边都使用无重音符号。

这个有效:

SELECT *
FROM description
WHERE unaccent(description.term) ILIKE unaccent('%sueño%');

关于POSTGRESQL unaccent 不匹配带有 ñ 的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49261343/

相关文章:

postgresql - Postgres : incorrect sorting if timestamp in smtp format

php - 在已经安装了 PHP 的 Mac OS 上安装 PHP?

sql - 具有外键引用的另一个表的值的 PostgreSQL 计算列

PostgreSQL:有效地将数据加载到星型模式中

由于默认权限,PostgreSQL 删除角色失败

postgresql - 液碱 : unterminated dollar-quoted string at or near $BODY$

python - 如何使用 sqlalchemy 按列表对结果进行排序?

postgresql - 一个数据库中的多个 Symfony 项目,但不同的 Postgres 模式

Django 连接到 PostgreSQL : "Peer authentication failed"

postgresql - 在 Postgres 中生成非碎片 UUID?