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]) 。
我将分别使用标志i
和g
来区分大小写和全局匹配。 我也将使用\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');
您可以使用replace
function
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;