搜索带有重音的名称

时间:2018-11-26 13:49:32

标签: postgresql postgresql-10

我正在尝试找到一种仅列出具有重音符号的名称的方法。

我正在使用下面的示例,取自该问题https://dba.stackexchange.com/questions/94887/what-is-the-impact-of-lc-ctype-on-a-postgresql-database

select firstname from (values ('bernard'), ('bérénice'), ('béatrice'), ('boris')) 
 AS l(firstname)
order by firstname collate "C";

当前输出为

firstname
-------
bernard
boris
béatrice
bérénice

预期输出为

firstname
-------
béatrice
bérénice

任何ida,我应该在where语句中放什么?

2 个答案:

答案 0 :(得分:2)

您必须先创建一个扩展名:

CREATE EXTENSION unaccent;

然后您可以使用以下查询进行检查:

SELECT l.firstname 
FROM (VALUES ('bernard'), ('bérénice'), ('béatrice'), ('boris')) AS l(firstname)
WHERE l.firstname <> unaccent(l.firstname);

答案 1 :(得分:2)

这可能会产生超出您要求的值,但是如果您要查找所有包含Unicode字符的记录,则可以对“ not ASCII”使用正则表达式:

select firstname
from (values ('bernard'), ('bérénice'), ('béatrice'), ('boris')) 
 AS l(firstname)
where
  firstname ~ '[^[:ascii:]]'

同样,这不仅包括重音符号,而且取决于您的用例,它可能满足需要。