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

基于现有值更新JSONB类型字段中的出生日期格式

PostgreSQL批量更新jsonb字段中的出生日期格式

核心操作要点

  • 访问jsonb中的出生日期值:用profile_fields ->> '2'获取键2对应的文本值(->>会将jsonb类型转为text,方便后续格式处理)
  • 筛选待转换记录:通过正则表达式匹配yyyy-mm-dd格式的日期,避免重复处理已符合要求的数据
  • 转换日期格式:先将字符串转成日期类型,再格式化目标格式dd-mm-yyyy
  • 批量更新jsonb字段:借助jsonb_set函数替换原jsonb中的对应值

先验证转换结果(执行SELECT测试)

SELECT 
    id,
    profile_fields ->> '2' AS original_dob,
    to_char(to_date(profile_fields ->> '2', 'YYYY-MM-DD'), 'DD-MM-YYYY') AS converted_dob
FROM your_table_name
WHERE profile_fields ->> '2' ~ '^\d{4}-\d{2}-\d{2}$';

批量UPDATE执行语句

BEGIN; -- 开启事务,出错可回滚,确保数据安全

UPDATE your_table_name
SET profile_fields = jsonb_set(
    profile_fields,
    '{2}', -- 指定要更新的jsonb键路径
    to_jsonb(to_char(to_date(profile_fields ->> '2', 'YYYY-MM-DD'), 'DD-MM-YYYY'))
)
WHERE profile_fields ->> '2' ~ '^\d{4}-\d{2}-\d{2}$'; -- 仅处理yyyy-mm-dd格式的记录

COMMIT; -- 确认转换结果正确后提交事务

关键说明

  • 把语句中的your_table_name替换为你的实际表名
  • jsonb_set的第三个参数需要是jsonb类型,所以用to_jsonb将格式化后的字符串转成对应类型
  • WHERE子句的正则^\d{4}-\d{2}-\d{2}$精准匹配年-月-日格式,不会误操作已符合要求的dd-mm-yyyy记录
  • 务必先执行SELECT测试语句,确认转换结果无误后再执行UPDATE

内容的提问来源于stack exchange,提问作者Chess Knowledge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:25:53