You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:PostgreSQL中更新hotel表hotel_info内first_name值的SQL语句

更新PostgreSQL中JSON列的嵌套字段值

没问题,这就帮你搞定!在PostgreSQL里修改嵌套JSON结构里的字段,用jsonb_set函数是最直接的方式——不管你的hotel_info列是json还是jsonb类型都能处理。

具体更新语句

情况1:hotel_info是json类型

UPDATE hotel
SET hotel_info = jsonb_set(
    hotel_info::jsonb,
    '{hotel, room_details, customer_detail, first_name}',
    '"new_first_name"'  -- 这里替换成你想要的新值,注意JSON字符串要加双引号
)::json
WHERE id = 1; -- 必须加WHERE子句!替换成你的实际筛选条件(比如酒店ID),不然会更新全表

情况2:hotel_info是jsonb类型(推荐使用JSONB,支持更多JSON操作)

UPDATE hotel
SET hotel_info = jsonb_set(
    hotel_info,
    '{hotel, room_details, customer_detail, first_name}',
    '"new_first_name"'
)
WHERE id = 1;

语句说明

  • jsonb_set的作用是修改JSONB对象的指定路径字段:
    1. 第一个参数是要操作的JSONB对象(JSON类型需要先转成JSONB)
    2. 第二个参数是路径字符串数组,用大括号包裹,对应你要修改的字段层级:从外层的hotel一步步定位到最内层的first_name
    3. 第三个参数是新值,必须符合JSON格式——字符串要加双引号,数字直接写,布尔值用true/false
  • 最后的::json是把修改后的JSONB对象转回JSON类型(如果列是JSONB就不需要这一步)
  • 一定要加WHERE子句!否则会更新表中所有行的first_name,根据你的实际需求替换筛选条件(比如指定酒店ID、名称等)

举个实际例子,如果要把first_name改成"John",筛选条件是酒店ID为5,语句就是:

UPDATE hotel
SET hotel_info = jsonb_set(
    hotel_info::jsonb,
    '{hotel, room_details, customer_detail, first_name}',
    '"John"'
)::json
WHERE id = 5;

内容的提问来源于stack exchange,提问作者Thangakumar D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:18:34