regex 如何删除Postgresql中的回车和换行符?

aemubtdh  于 2022-12-19  发布在  PostgreSQL
关注(0)|答案(4)|浏览(290)

我又一次被困在试图以我需要的格式获取我的数据。我有一个文本字段,看起来像这样。
“迪安杰洛001迪安杰洛
本地名称来源:意大利人
来自美国名字Deangelo
含义:天使的
他是所有人的欢乐源泉。
个人诚信·他的好名声是他最宝贵的资产。个性·当你被火鸡包围时,很难像鹰一样翱翔!关系·开始得很慢,但与deangelo的关系会随着时间的推移而建立。旅行&休闲·一生一次的旅行就在他的未来。
事业与金钱作为一个有天赋的孩子,迪安杰洛需要不断地接受挑战。
生命的机遇、欢乐和幸福等待着这位受祝福的人。
Deangelo的幸运数字十二时三十八分十八时三十四分二十九时十六分

在Postgresql中删除回车和换行符的最佳方法是什么?我尝试了几种方法,但都不想执行。

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;
watbbzwu

watbbzwu2#

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

我在我的postgres d/b中遇到了同样的问题,但是有问题的换行符不是传统的ascii CRLF,它是一个unicode行分隔符,字符U2028。

  • 更新...虽然我只遇到过前面提到的字符“在野外”,遵循lmichelbacher的建议,翻译更多的unicode换行符一样的字符,使用这个:*
select regexp_replace(field, E'[\\n\\r\\f\\u000B\\u0085\\u2028\\u2029]+', ' ', 'g' )
u4dcyp6a

u4dcyp6a3#

OP特别询问了正则表达式,因为它看起来像换行符一样关注其他一些字符,但是对于那些 * 只是 * 想要去掉换行符的人,你甚至不需要去正则表达式,你可以简单地做:

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

我认为这是一个SQL标准行为,所以它应该扩展到所有的Postgres版本,但可能是最早的版本。

ekqde3dh

ekqde3dh4#

如果需要从字符串的开始或结尾删除换行符,可以使用以下命令:

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

请记住,帽子**^表示字符串的开始,美元符号$**表示字符串的结束。
希望能帮上忙。

相关问题