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

PostgreSQL 12中jsonb值转timestamp报YYYY值无效如何解决

问题产生原因
  • 根因是jsonb取值的类型转换逻辑错误:使用->操作符从jsonb列提取字段时,返回结果仍为jsonb类型,直接强转为text时会保留JSON字符串的外层包裹双引号,最终传入to_timestamp的实际值是首尾带引号的"2022-06-30T11:19:51.459596+00:00",和你单测时传入的无引号纯时间字符串不一致。解析年份字段时,开头的引号会被识别为无效字符,仅能读取到"202片段,因此触发invalid value ""202" for "YYYY"报错。
  • 额外逻辑隐患:你使用的格式模板YYYY-MM-DDTHH:MI:SS没有匹配时间串中的微秒、时区后缀,即使解决引号问题,转换结果也会丢失精度,且小时位未指定24小时制,会出现12小时制解析的时间偏差。
正确实现方式

使用jsonb专用的文本提取操作符->>直接取值,该操作符会自动剥离JSON格式的外层引号,直接返回原生text类型的时间串。PostgreSQL原生支持ISO8601格式时间的自动类型转换,无需手写to_timestamp格式模板,写法更简洁也不易出错:

select count(*)
from users u 
where (u.column_name ->> 'timestamp_value')::timestamptz >= '2022-06-30'

如果需要明确使用to_timestamp做格式校验,补全格式匹配规则即可,注意小时位必须用HH24指定24小时制:

select count(*)
from users u 
where to_timestamp(
    u.column_name ->> 'timestamp_value',
    'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'
) >= '2022-06-30'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:15:45