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
相关产品推荐
相关产品推荐

