大家好,我有一个西类牙语医学术语数据库。假设表 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/