如何删除Postgresql中的回车和新行?

所有,

我再次卡住试图让我的数据在我需要它的格式。我有一个文本字段,看起来像这样。

“deangelo 001 deangelo

名字的本地起源:italain

从美国名称deangelo

意思是:天使的

情感谱•他是所有人欢乐的泉源。

个人诚信•他的美名是他最宝贵的财富。 个性•当你被火鸡包围时,很难用鹰翱翔! 关系•开始缓慢,但与deangelo的关系随着时间而build立。 旅行和休闲•一生中的一次旅行是在他的未来。

职业和金钱•一个天才的孩子,deangelo将需要不断挑战。

生活的机会•欢乐和幸福等待着这个幸运的人。

deangelo的幸运数字:12•38•18•34•29•16

Postgresql最好的办法是删除回车和新行? 我已经尝试了几件事情,他们都不想performance出来。

select regexp_replace(field, E'\r\c', ' ', 'g') from mytable WHERE id = 5520805582 SELECT regexp_replace(field, E'[^\(\)\&\/,;\*\:.\>\<[:space:]a-zA-Z0-9-]', ' ') FROM mytable WHERE field~ E'[^\(\)\&\/,;\*\:.\<\>[:space:]a-zA-Z0-9-]' AND id = 5520805582; 

在此先感谢,亚当

 select regexp_replace(field, E'[\\n\\r]+', ' ', 'g' ) 

阅读手册http://www.postgresql.org/docs/current/static/functions-matching.html

 select regexp_replace(field, E'[\\n\\r\\u2028]+', ' ', 'g' ) 

我在postgres d / b中遇到了同样的问题,但是所涉及的换行符不是传统的ascii CRLF,它是一个Unicode字符分隔符U2028。 上面的代码片段也将捕获该Unicode变体。

更新…虽然我只遇到过“野外”中提到的字符,但要遵循lmichelbacher的build议来翻译更多的unicode换行字符,请使用以下命令:

 select regexp_replace(field, E'[\\n\\r\\f\\u000B\\u0085\\u2028\\u2029]+', ' ', 'g' ) 

OP专门询问了正则expression式,因为它会出现一些其他字符以及换行符的问题,但是对于那些只想删除换行符的用户,甚至不需要去正则expression式。 你可以简单地做:

 select replace(field,E'\n',''); 

我认为这是一个SQL标准的行为,所以它应该延伸到所有的,但可能是最早的Postgres版本。 上述testing在9.4和9.2中对我很好

在这种情况下,您需要从string的开头或结尾删除换行符,您可以使用以下命令:

 UPDATE table SET field = regexp_replace(field, E'(^[\\n\\r]+)|([\\n\\r]+$)', '', 'g' ); 

请记住,帽子^表示string的开始,美元符号$表示string的结尾。

希望它能帮助别人。