在PostgreSQL中,我如何替换数据库列中所有字符串实例?
例如,我想将所有的cat
替换为dog
。
那么,最好的方法是什么?
在PostgreSQL中,我如何替换数据库列中所有字符串实例?
例如,我想将所有的cat
替换为dog
。
那么,最好的方法是什么?
replace(string text, from text, to text)
例如:
UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')
请注意,这将是一种字符串替换,因此“category”将变为“dogegory”。使用regexp_replace函数可以帮助您定义一个更严格的匹配模式来替换所需内容。
regexp_replace
函数。 - drs如果你需要更严格的替换匹配,PostgreSQL 的 regexp_replace
函数可以使用 POSIX 正则表达式模式进行匹配。它的语法为 regexp_replace(source, pattern, replacement [, flags ])。
我将使用标志i
和g
用于不区分大小写和全局匹配。 我还将使用\m
和\M
分别匹配单词的开头和结尾。
通常在执行正则表达式替换时会遇到一些棘手的问题。让我们看看如何轻松地将cat替换为dog。
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
即使经过所有这些,仍然存在至少一个未解决的条件。例如,以“Cat”开头的句子将被替换为小写的“dog”,从而破坏了句子的大写。
查看当前PostgreSQL模式匹配文档以获取详细信息。
根据我的例子,也许最安全的选择是:
UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi');
^
和 $
匹配字符串的开头和结尾;但是 \m
和 \M
仅匹配单词的开头和结尾。因此,在大多数情况下使用 ^
和 $
将失败。 - Clint Pachl你可以使用replace
函数。
UPDATE your_table SET field = REPLACE(your_field, 'cat','dog')
以下是函数定义(来自这里):
replace(string text, from text, to text)
并返回修改后的文本。您还可以查看此 SQL Fiddle。
以下是一个编程示例,使用正则表达式将列中的所有1个或多个空格字符替换为下划线 -
select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;