2

在我的 PostgreSQL 中,我想替换(;<>)字符串中出现的所有字符。

我的查询:

update table_name set text = regexp_replace(text, '/[(;<>)]+/g', '');

我认为我的正则表达式是错误的。谁能帮我解决这个问题?

4

1 回答 1

7

translate()在这个简单的情况下使用更快:

UPDATE tbl SET text = translate(text, '(;<>)', '');

第二个参数中没有对应第三个参数的每个字符都被替换为空。

正则表达式解决方案可能如下所示:

regexp_replace(text, '[(;<>)]', '', 'g');

基本元素是'g'替换“全局”而不仅仅是第一个匹配项的第四个参数。第二个参数是一个字符类。
您走在正确的轨道上,只是regexp_replace().

提示UPDATE

如果您不希望更改所有行,我强烈建议您调整您的UPDATE陈述:

UPDATE tbl
SET    text =  translate(text, '(;<>)', '')
WHERE  text <> translate(text, '(;<>)', '');

这样可以避免(昂贵的)空更新。(NULL在这种特殊情况下会自动覆盖。)

于 2013-02-19T08:48:53.167 回答