PostgreSQL中的正则表达式替换

时间:2011-06-02 22:42:52

标签: sql regex postgresql replace

我有一个表格,其中特定的字符串字段通常包含单字母和双引号的unicode:\u0027\u0022。事实证明,我实际上需要他们逃脱更多。我需要在他们面前增加一个\

例如,我需要将\u0027Hello, world\u0027更改为\\u0027Hello, world\\u0027

哪种SQL可以在表上为所有记录执行此类更新?

2 个答案:

答案 0 :(得分:10)

如果你确实需要这个,那么你可以使用这样的RE:

UPDATE table SET c = regexp_replace(c, '[^\\]\\(u\d{4})', '\\\\\1', 'g');

确保启用standard_conforming_strings并将regex_flavor设置为advanced。

SHOW standard_conforming_strings;
 standard_conforming_strings 
-----------------------------
 on
(1 row)

替换字符串'\\\\\1'表示以下两个反斜杠\\\1表示第一个(报告)带括号的子表达式(即'u'与模式中的四个数字连接在一起)。< / p>

答案 1 :(得分:1)

SET yourcolumn = REPLACE(yourcolumn, '\u0027', '\\u0027')的UPDATE语句应该这样做。在进行批量更新之前,请先尝试以下方法检查它是否有效。

SELECT REPLACE('\u0027', '\u0027', '\\u0027')