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

PostgreSQL递归CTE列类型不匹配错误修正及日期序列生成求助

PostgreSQL递归CTE类型不匹配错误修正

错误原因

递归CTE的非递归部分返回的dt是date类型,但递归部分dt + interval '1 month'返回的是timestamp without time zone类型,列数据类型不统一,触发PostgreSQL的类型检查错误。

修正后的查询语句

WITH RECURSIVE cte_0 AS (
    -- 直接将日期截断到月初并转为date类型,简化处理
    SELECT MIN(date_trunc('month', day)::date) AS dt
    FROM Transactions
    UNION ALL
    -- 将递归计算的结果转为date,保证类型一致
    SELECT (dt + INTERVAL '1 month')::date
    FROM cte_0
    WHERE dt < (SELECT MAX(date_trunc('month', day)::date) FROM Transactions)
)
SELECT * FROM cte_0;

关键修改点

  • 简化日期处理:date_trunc('month', day)直接转为date即可,无需先转字符串再转date,减少不必要的转换开销
  • 统一递归项类型:将dt + interval '1 month'的结果强制转为date,确保和非递归项的dt类型完全一致
  • 优化条件子查询:同样简化日期截断逻辑,保持代码一致性

执行上述查询后,将得到预期结果:

2021-05-01
2021-06-01
2021-07-01

内容的提问来源于stack exchange,提问作者АЛлександр Рудинский

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:07:40