2012-07-20 192 views
1

我有数据包含由于错误的导出工具而导致从Excel电子表格(* .xls)导入的充满无效字符的注释字段。替换PostgreSQL中的符号字符

该字符在XML中出错,表示字符引用“&#xb”是无效的XML字符。

我该如何去替换wingdings字符,例如:PostgreSQL中的性别符号,块,符号?

我试图将这些字符复制并粘贴到替换语句或其他任何事情中,这是徒劳的。有没有办法通过RegExp来替换任何非字母数字或“ - = +”类型的字符?任何帮助,将不胜感激。

+0

检查此问题:http://stackoverflow.com/questions/336210/regular-expression-for-alphanumeric-and-underscores – BlackVegetable 2012-07-20 19:38:33

+0

请在以后的帖子中显示您的PostgreSQL版本。不同的版本具有不同的功能,所以它很重要。 – 2012-07-21 01:21:13

回答

2
SELECT regexp_replace('123xabcABCxöäüxÖÄÜx¡‘’xæćčx=+-x"§$%&/()x' 
        ,'[^a-zA-Z0-9=+-]','_','g') 

结果:

123xabcABCx___x___x___x___x=+-x________x 

在字符类[^a-zA-Z0-9=+-]取消它的领先^。请阅读“以下列表中的所有字符而不是”。

注意将-字符放在字符类的末尾(或开始处),否则它将具有类似a-z中的特殊含义。

注意“全局”的第四个参数'g'。没有它,只有第一场比赛会被取代。

另请注意,öäü等字符是如何被替换的。您可能会或可能不会希望这样...... 因此,你可能有兴趣在unaccent扩展,提供了unaccent()功能:

的unaccent()函数从一个给定的 串口音(音调符号标志)。

有关PostgreSQL正则表达式的详细信息,请参见手册here

+0

这非常有帮助。非常感谢你。 – MISMajorDeveloperAnyways 2012-07-20 20:23:00