我有一个表,其中包含可能包含特殊字符名称列表:
id name
1 Johän
2 Jürgen
3 Janna
4 Üdyr
...
是否有一个函数可以将每个字符替换为另一个特定的字符?(不一定是无重音的字符)。例如:
SELECT id, function('ä,ü',name,'ae,ue');
Result:
id name
1 Johaen
2 Juergen
3 Janna
4 UEdyr
...
5条答案
按热度按时间hsvhsicv1#
替换()
如果你只想替换一个或几个字符,你可以使用函数replace(string text,from text,to text)来替换字符串substring中的所有字符。replace函数可以用来替换一个字符到几个字符。
翻译()
如果要将某些字母转换为其他字母,可以使用函数translate(string text,from text,to text),将字符串中与from中的字符匹配的任何字符替换为to集中的相应字符。
一些可供使用的数据:
replace函数示例:
此函数将名称列中的字母ä替换为字母a。Juhänäo变为Juhanao。
现在它用ae代替字母ä。
不是很好,但在这个例子中,所有的ä都变成ae,ü变成ue,而Ü变成'Ue'。
更改字母并更新行。更新结果如下:
translate函数示例:
将所有字母ä转换为a,ü转换为u,Ü转换为U。
更新表,以便翻译所有预定义的字母,并将更改保存到数据库。更新结果如下:
详细信息:
Replace characters with multi-character strings
Postgresql string functions
sshcrbum2#
不,没有这个函数。也许写优化的C扩展并不难。但C语言并不总是必要的。你可以试试SQL或PLpgSQL函数:
在我的comp上,它在200 ms下进行6000次转换(但我有PostgreSQL的开发人员构建-它更慢)。
pieyvz9o3#
如果你想要德语字母,那么这个方法就可以:
虽然它并不优雅。
92vpleto4#
避免编写自己的非重音函数。相反,我建议使用非重音扩展。
这里是Postgres documentation for Unaccent的链接
kh212irz5#
您只需使用以下代码:
祝你好运^^