postgresql – replace文本字段中的所有string的实例

在postgresql中,如何replace数据库列中的所有string实例?

比方说,我想用dog代替cat所有例子。

什么是最好的方法来做到这一点?

你想使用postgresql的replace函数:

 replace(string text, from text, to text) 

例如 :

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

但请注意,这将是一个string到string的replace,所以'category'将变成'dogegory'。 regexp_replace函数可以帮助您为要replace的内容定义更严格的匹配模式。

正则expression式

如果你需要更严格的replace匹配,PostgreSQL的regexp_replace函数可以匹配使用POSIX正则expression式模式。 它有语法regexp_replace(source,pattern,replacement [,flags])

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

执行正则expression式replace时通常有很多问题。 让我们看看用replace是多么容易。

 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 

即便如此, 至less有一个未解决的情况。 例如,以“猫”开头的句子将被replace为小写的“小狗”,这个小写字母就是大写字母。

查看当前PostgreSQL 模式匹配文档的所有细节。

用replace文本更新整个列

以我的例子来说,也许最安全的select是:

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

您可以使用replacefunction

 UPDATE your_table SET field = REPLACE(your_field, 'cat','dog') 

函数定义如下(从这里得到):

 replace(string text, from text, to text) 

并返回修改的文本。 你也可以看看这个SQL小提琴 。

下面是一个使用正则expression式用下划线replace列中的一个或多个空格字符的所有实例的示例 –

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