如何更新PostgreSQL的JSON日期字段(从另一列取值)
解决PostgreSQL 10.9用列值更新JSON日期字段的问题
你之前的语句报错是因为'{"date_field":column}'里的column被当作JSON字面量解析,而非引用表中的列值,PostgreSQL无法识别这个无效的JSON token。针对PostgreSQL 10.9,有两种可靠的写法:
方法1:使用json_build_object函数(推荐)
这个函数会自动处理数据类型转换,避免手动拼接字符串的转义问题:
UPDATE table SET json_column = json_column || json_build_object('date_field', column) WHERE id = 123;
如果column是日期/timestamp类型,json_build_object会自动将其转换为符合JSON格式的字符串,无需额外处理。
方法2:拼接合法JSON字符串并转换类型
如果习惯字符串拼接,需要确保生成的是合法JSON格式,再转换为json类型:
UPDATE table SET json_column = json_column || ('{"date_field":"' || column::text || '"}')::json WHERE id = 123;
注意这里需要把column显式转为text类型,避免类型拼接错误,同时给日期值加上双引号,保证JSON格式合法。
两种方法都会将目标JSON字段中的date_field键值替换为指定列的内容,如果原JSON中没有该键则新增。
内容的提问来源于stack exchange,提问作者K Y
相关产品推荐
相关产品推荐

