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')
我有一堆想要检测的字符,以便在 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')