PostgreSQL插入日期时触发类型不匹配42804错误如何解决
报错原因
你写的02/01/2012没有加单引号,PostgreSQL会将其识别为除法算术表达式,计算得到的结果是整数,自然和prod_date字段的date类型不匹配。
解决方案
- 方案1:优先使用ISO标准日期格式(无兼容性问题)
用单引号包裹YYYY-MM-DD格式的日期字符串,是最稳妥的写法,不受数据库日期格式配置影响。注意根据你的业务需求确认日期是1月2日还是2月1日,调整年月日顺序即可。
正确语句示例:
INSERT INTO well.production_monthly( api10, prod_date, oil, gas, water) VALUES (4246141341,'2012-01-02', 102, 27, 0);
- 方案2:用
TO_DATE函数明确指定日期格式
如果你需要保留月/日/年的输入格式,可通过TO_DATE函数声明格式规则,避免解析错误:
INSERT INTO well.production_monthly( api10, prod_date, oil, gas, water) VALUES (4246141341, TO_DATE('02/01/2012', 'MM/DD/YYYY'), 102, 27, 0);
如果你的输入是日/月/年格式,把第二个参数改成'DD/MM/YYYY'即可。
- 方案3:字符串强制类型转换(仅推荐确认数据库日期配置时使用)
如果你的数据库datestyle参数配置为MDY(月/日/年),也可以直接将带单引号的日期字符串强转为date类型:
INSERT INTO well.production_monthly( api10, prod_date, oil, gas, water) VALUES (4246141341, '02/01/2012'::date, 102, 27, 0);
内容的提问来源于stack exchange,提问作者Justin Massaro
相关产品推荐
相关产品推荐

