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

Snowflake查询报错:Date 'Today' is not recognized 求助

问题解决:Snowflake CASE表达式类型不匹配导致的日期识别错误

错误原因

出现Date 'Today' is not recognized错误的核心原因是CASE表达式的两个分支返回数据类型不一致:

  • 满足条件时返回字符串类型的'Today'
  • 不满足条件时返回DATE类型的date_id

Snowflake会自动尝试对分支结果做隐式类型转换,将字符串转为DATE格式,但'Today'不属于合法日期值,因此触发报错。

修正后的查询语句

只需统一CASE表达式所有分支的返回类型,将DATE类型日期转为字符串格式即可解决问题:

WITH Date_Generator AS ( 
  SELECT 
    DATEADD(DAY, SEQ4(), '2021-01-01')        AS date_id 
  FROM TABLE(GENERATOR(ROWCOUNT=>3000))
),

Final AS ( 
  SELECT  
    DATE(date_id)                                                   AS date_id,
    CASE  
        WHEN DATE(date_id) = current_date() THEN 'Today' 
        ELSE TO_CHAR(DATE(date_id), 'YYYY-MM-DD') -- 将DATE转成字符串,统一分支返回类型
    END                                                             AS date_filter, 
    DAYNAME(date_id)                                                AS day_name, 
    DAY(date_id)                                                    AS day_number_month
  FROM Date_Generator
  WHERE  date_id <= DATEADD(YEAR, 1, GETDATE())
)

SELECT 
  *
FROM Final

关键修改说明

把ELSE分支的DATE(date_id)替换为TO_CHAR(DATE(date_id), 'YYYY-MM-DD'),让CASE的两个分支都返回字符串类型,既避免了隐式类型转换错误,又保留了非当前日期的标准日期格式展示。你可以根据需求调整TO_CHAR的日期格式参数,比如'MM/DD/YYYY'等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:52:12