PostgreSQL查询报错:运算符不匹配,日期字段需显式转换?
PostgreSQL 运算符不存在错误排查与解决
错误核心原因
你遇到的问题根本不是字段类型不匹配,而是标识符引用格式错误。看错误提示里的运算符左侧是"GOOD_RECIEPT_ANOMALY_DETECTION_V2_last_alerts_sent_gsheet_histo"——这是因为你把表名和字段名用一对双引号括在了一起,PostgreSQL会把这个整串当成一个单独的列名,而非表名.字段名的合法引用方式。这个不存在的“列”自然没有和timestamp类型比较的运算符,才触发了报错。
修正后的SQL语句
把表名和字段名的双引号分开写,让PostgreSQL能正确识别目标字段:
SELECT * FROM "GOOD_RECIEPT_ANOMALY_DETECTION_V2_last_alerts_sent_gsheet_historic" WHERE "GOOD_RECIEPT_ANOMALY_DETECTION_V2_last_alerts_sent_gsheet_historic"."PO_Creation_date" > CURRENT_DATE - INTERVAL '1 month'
也可以用表别名简化写法:
SELECT * FROM "GOOD_RECIEPT_ANOMALY_DETECTION_V2_last_alerts_sent_gsheet_historic" t WHERE t."PO_Creation_date" > CURRENT_DATE - INTERVAL '1 month'
关于字段类型的补充说明
如果PO_Creation_date确实是date类型,和CURRENT_DATE - INTERVAL '1 month'得到的timestamp类型比较是完全合法的——PostgreSQL会自动把date隐式转换为timestamp(等效于PO_Creation_date::timestamp),不需要手动显式转换。你之前的疑惑是错误的引用方式掩盖了真正问题导致的。
验证字段类型的方法
若要确认字段实际类型,可执行以下查询:
SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'GOOD_RECIEPT_ANOMALY_DETECTION_V2_last_alerts_sent_gsheet_historic';
内容的提问来源于stack exchange,提问作者Data_ing
相关产品推荐
相关产品推荐

