Postgres:如何用不同的模式替换字符?

Postgres: How to replace chars with different patterns?

我有一堆想要检测的字符,以便在 postgres 的查询中将其更改为它们的等价物。

例如,如果我有这个字符串 'Résidence du Château de Salles' 我想通过 char 更改 char 'é' 'e' 和 char 'â' 由 char 'a'

同时更改 'â' 和 'é' 的唯一方法是像这样连接 postgres regexp_replace 的指令:

select lower(regexp_replace(regexp_replace('Résidence du Château de Salles', 'é', 'e', 'g'), 'â', 'a', 'g'));

如果我想用其他等价物来改变这个字符块: âêîôû -> aeiou, äÈïöü -> aeiou, áéíóú -> aeiou, àèìòù -> aeiou, ñ -> ñ, ç -> c

我必须连接 regexp_replace 的一堆函数。每个字符的每个函数:

select lower(regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace('Résidence du Château de Salles', ..............................);

还有其他最好的方法吗?

如果您只想用另一个字符替换单个字符,translate() 是一个更简单的选择:

select translate('Résidence du Château de Salles', 'éâ', 'ea')