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

Postgresql中CHAR转yyyy-mm-dd日期格式时年份显示错误问题

问题原因

出现年份解析错误的核心原因是to_date()函数的第二个参数使用错误:该参数指定的是输入字符串的格式规则,而非你期望的输出日期格式。
你的原始birthdate字段CHAR类型取值为MM/DD/YYYY格式(月/日/年,斜杠分隔),但你传入的格式串YYYY-MM-DD和输入格式完全不匹配:

  • 格式串要求的顺序是「年-月-日」,分隔符为横杠,和输入的「月/日/年+斜杠」的结构完全错位
  • 数据库解析时逻辑错位,会错误将输入字符串末尾的两位年份数字当成完整年份,自动补前导零,就出现了0019这类错误结果,和你遇到的现象完全吻合。
修复方案

1. 数据回滚(如果已执行错误ALTER语句)

先将birthdate字段改回原CHAR类型,从备份恢复原始的字符串格式数据,避免错误日期数据永久保留。

2. 执行正确的类型转换语句

使用和输入格式匹配的格式串MM/DD/YYYY调用to_date(),语句如下:

ALTER TABLE animals ALTER COLUMN birthdate TYPE DATE 
using to_date(birthdate, 'MM/DD/YYYY');

转换完成后DATE类型默认查询展示格式就是你需要的YYYY-MM-DD,和预期结果完全一致。

注意事项
  • 执行ALTER前请务必备份全表数据,避免转换异常导致数据丢失
  • 若表数据量较大,ALTER操作会锁表,建议在业务低峰期执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:06:07