PostgreSQL-替换文本字段中字符串的所有实例


Answers:


404

您要使用postgresql的replace函数:

replace(string text, from text, to text)

例如 :

UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')

但是请注意,这将是字符串到字符串的替换,因此“类别”将变为“分类”。regexp_replace函数可以帮助您为要替换的内容定义更严格的匹配模式。


4
大家好,我喜欢您的回答和解释,真的很有帮助。您能否使用regexp_replace添加示例?谢谢!
Wim Feijen 2014年

1
为了获得更好的粒度,您可以使用regexp_replace
drs 2015年

83

正则表达方式

如果您需要更严格的替换匹配,则regexp_replace可以使用POSIX正则表达式模式来匹配PostgreSQL的函数。它具有语法regexp_replace(source,pattern,replacement [,flags])

我将分别使用标志ig不区分大小写和全局匹配。我还将分别使用\m\M匹配单词的开头和结尾。

执行正则表达式替换时通常有很多陷阱。让我们来看看它是多么容易更换一个

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog');
-->                    Cat bobdog cat cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'i');
-->                    dog bobcat cat cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'g');
-->                    Cat bobdog dog dogs dogfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'gi');
-->                    dog bobdog dog dogs dogfish

SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat', 'dog', 'gi');
-->                    dog bobcat dog dogs dogfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat\M', 'dog', 'gi');
-->                    dog bobdog dog cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat\M', 'dog', 'gi');
-->                    dog bobcat dog cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat(s?)\M', 'dog\1', 'gi');
-->                    dog bobcat dog dogs catfish

即使所有这些,至少还有一个未解决的情况。例如,以“猫”开头的句子将替换为小写的“狗”,这会破坏句子的大小写。

查看当前的PostgreSQL 模式匹配文档以获取所有详细信息。

用替换文本更新整个列

根据我的示例,也许最安全的选择是:

UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi');


0

这是一个使用正则表达式用下划线替换一列中1个或多个空格字符的所有实例的示例-

select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;

我认为只需要在“ s”之前加一个反斜线
Marty Neal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.