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

Snowflake SQL按日期区间取对应月份时报类型转换错误咨询

报错原因

CASE WHEN语句的两个返回分支数据类型不匹配是报错的核心原因:

  • 第一个分支LAST_DAY(ADD_MONTHS(CURRENT_DATE(), - 2), 'MM')返回值为DATE类型
  • 第二个分支MONTH(CURRENT_DATE)返回值为NUMBER数字类型
    Snowflake要求CASE WHEN的所有返回分支必须输出统一类型,因此触发了类型转换失败的报错。
修正后SQL代码
SELECT 
  CURRENT_DATE,
  CASE 
    WHEN DAY(CURRENT_DATE) BETWEEN 1 AND 10 
    THEN MONTH(ADD_MONTHS(CURRENT_DATE(), -2))
    ELSE MONTH(ADD_MONTHS(CURRENT_DATE(), -1))
  END AS dates
;
逻辑说明
  • 若当前日期的日部分在1-10区间:对当前日期做减2个月的运算后直接提取月份数字,输出数值类型,完全匹配你需要返回前2个月月份的需求
  • 若当前日期的日部分大于10:对当前日期做减1个月的运算后提取月份数字,输出数值类型,和上一分支类型统一,避免类型冲突
    同时该逻辑自动适配跨年场景,比如当前为1月5号时,减2个月会自动取上一年11月的月份值11,无需额外做跨年判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:54:02