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

PostgreSQL中to_timestamp()转换JSON内Unix时间戳整数失效问题

PostgreSQL中JSON字段的Unix时间戳转日期问题解决

问题原因

你执行的select to_timestamp(info->'created_at') from booking;无法生效,是因为info->'created_at'返回的是JSON类型的字符串值,而to_timestamp()函数仅接受数值类型(integer/bigint)作为参数,类型不匹配导致转换失败。

解决方案

需要先将JSON字段中的字符串提取为文本,再转换为数值类型后传入to_timestamp(),以下是几种可行写法:

  • 最常用的写法,使用->>操作符提取文本值:

    SELECT to_timestamp((info->>'created_at')::bigint) FROM booking;
    

    说明:->>会直接将JSON字段的内容转为PostgreSQL文本类型,再通过::bigint强制转换为整数,最后由to_timestamp()转为可读日期时间。

  • 使用json_extract_path_text函数提取文本(效果与->>一致):

    SELECT to_timestamp(json_extract_path_text(info, 'created_at')::bigint) FROM booking;
    
  • 处理空值或无效值的健壮写法:
    如果存在created_at为空字符串或非数值的情况,可通过NULLIF避免转换报错:

    SELECT to_timestamp(NULLIF(info->>'created_at', '')::bigint) FROM booking;
    

    当created_at为空字符串时,该表达式会返回NULL而非抛出转换错误。

验证示例

假设info字段值为{"created_at": "1667801192"},执行上述查询后会返回对应的日期时间(具体时区取决于数据库配置,例如2022-11-06 10:06:32+08)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:50:24