【发布时间】:2013-02-03 21:00:13
【问题描述】:
在我的 PostgreSQL 中,我想替换字符串中出现的所有字符 (;<>)。
我的查询:
update table_name set text = regexp_replace(text, '/[(;<>)]+/g', '');
我认为我的正则表达式是错误的。谁能帮帮我?
【问题讨论】:
标签: sql regex postgresql pattern-matching
在我的 PostgreSQL 中,我想替换字符串中出现的所有字符 (;<>)。
我的查询:
update table_name set text = regexp_replace(text, '/[(;<>)]+/g', '');
我认为我的正则表达式是错误的。谁能帮帮我?
【问题讨论】:
标签: sql regex postgresql pattern-matching
对于这个简单的案例,使用更快的translate():
UPDATE tbl SET text = translate(text, '(;<>)', '');
第二个参数中没有对应第三个参数的每个字符都被替换为空。
正则表达式解决方案可能如下所示:
regexp_replace(text, '[(;<>)]', '', 'g');
基本元素是第 4 个参数 'g',用于替换“全局”而不是第一个匹配项。第二个参数是一个字符类。
你走在正确的轨道上,只是regexp_replace() 的语法问题。
UPDATE
如果您不希望 所有 行被更改,我强烈建议调整您的 UPDATE 声明:
UPDATE tbl
SET text = translate(text, '(;<>)', '')
WHERE text <> translate(text, '(;<>)', '');
这样可以避免(昂贵的)空更新。 (NULL 在这种特殊情况下会自动覆盖。)
【讨论】:
translate 的观点非常好。