求助: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对象的指定路径字段:- 第一个参数是要操作的JSONB对象(JSON类型需要先转成JSONB)
- 第二个参数是路径字符串数组,用大括号包裹,对应你要修改的字段层级:从外层的
hotel一步步定位到最内层的first_name - 第三个参数是新值,必须符合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
相关产品推荐
相关产品推荐

