【发布时间】:2015-04-06 22:37:20
【问题描述】:
我在名为notes 的架构中有一个列。它包含每次更新记录时都应该更新的修订注释。如何在不覆盖的情况下将数据附加到现有条目?
例如目前显示:
“09022014,更新了用户的 GSDA ID。”
运行查询后,我想查看:
"09022014,更新了用户的 GSDA ID。04062015,更新了 TTFIA 构建 字段。”
【问题讨论】:
我在名为notes 的架构中有一个列。它包含每次更新记录时都应该更新的修订注释。如何在不覆盖的情况下将数据附加到现有条目?
例如目前显示:
“09022014,更新了用户的 GSDA ID。”
运行查询后,我想查看:
"09022014,更新了用户的 GSDA ID。04062015,更新了 TTFIA 构建 字段。”
【问题讨论】:
将新注释与当前注释连接 (||):
update tablename set notes = notes || " new note"
where id = 123;
哦,别忘了正则表达式:
update tablename set notes =
regexp_replace('notes', '^(.*)$', '\1' || ' note 2')
where id = 123;
这揭示了使用 regexp_replace 的意外结果,如果您有兴趣,我在此询问:Explain unexpected regexp_replace result
【讨论】:
使用连接运算符||将现有列值与新值连接。
“09022014,更新了用户的 GSDA ID。04062015,更新了 TTFIA 构建字段。”
如果您的值本身带有双引号,那么您需要注意另外一件事情,即 TRIM 双引号 在现有列值的右侧。
当然,您需要在现有值和新值之间保留一个空格。
例如,
UPDATE table_name
SET notes = rtrim(notes, '"') || ' ' || new_note || '"';
【讨论】: