PostgreSQL使用current_date过滤数据时出现运算符不匹配错误求助
问题原因及解决方法
核心原因
你的"pld.PlanDate"字段类型是text(字符串),并非date类型:
- 第二个查询中,
Between '2023-04-01' AND '2023-04-11'两边都是字符串,PostgreSQL可直接执行字符串比较,因此能正常运行。 - 第一个查询中,
current_date是date类型,PostgreSQL无法直接对text和date类型执行<=/>=比较(Between逻辑的底层操作),所以抛出operator does not exist: text <= date错误。
解决办法
有两种可行方案:
- 显式转换字段为date类型:将
"pld.PlanDate"转换成date类型后再做比较,这是更稳妥的方案,能避免字符串日期格式不一致导致的比较错误
SELECT "pld.PlanDate" FROM salesdespatch.sld_cube_salesdespatchdetailshop WHERE CAST("pld.PlanDate" AS DATE) Between '2023-04-01' AND current_date;
也可以用PostgreSQL简化类型转换写法:
SELECT "pld.PlanDate" FROM salesdespatch.sld_cube_salesdespatchdetailshop WHERE "pld.PlanDate"::DATE Between '2023-04-01' AND current_date;
- 转换current_date为字符串:把date类型的
current_date转为和字段格式一致的字符串
SELECT "pld.PlanDate" FROM salesdespatch.sld_cube_salesdespatchdetailshop WHERE "pld.PlanDate" Between '2023-04-01' AND TO_CHAR(current_date, 'YYYY-MM-DD');
内容的提问来源于stack exchange,提问作者Solvent
相关产品推荐
相关产品推荐

