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

Postgres中JSON提取的YYYY-MM-DD字符串转date类型报错如何解决

问题解决方法

报错的核心原因是你提取到的日期字符串里包含不可见的Unicode控制字符(最常见为左到右标记U+200E),这类字符不会在文本展示中显示,但会导致日期类型转换识别失败。你看到的"‎2020-‎12-‎09"实际字符长度大于合法YYYY-MM-DD格式的10位,可以用以下语句验证:

SELECT octet_length(data->>'closeDate') FROM 你的表名 LIMIT 1;

如果返回结果大于10即可确认存在不可见字符。

可用解决方案

  • 方案1(通用首选):用正则清除所有非数字、非横杠的字符后再做类型转换
(regexp_replace(data->>'closeDate', '[^0-9-]', '', 'g'))::date AS PortalCloseDate
  • 方案2(精准替换):如果确认仅存在U+200E左到右标记,可以单独替换该字符
(replace(data->>'closeDate', U&'\200E', ''))::date AS PortalCloseDate
  • 方案3(强兼容兜底):清除所有非数字字符后,按纯数字日期格式转换,适配更多不规则格式
to_date(regexp_replace(data->>'closeDate', '[^0-9]', '', 'g'), 'YYYYMMDD') AS PortalCloseDate

长期优化建议

建议在数据写入JSON字段前,先对日期类字段做清洗,去除不可见控制字符,避免后续查询过程中反复做转换处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:36:04