Google Data Studio中如何编写两个日期间的CASE语句
报错原因
触发报错的核心问题有两个:
- 类型不匹配:
FORMAT_DATETIME函数返回值是文本类型,但BETWEEN后面跟的20190218、20190219这类值是数字类型,运算符无法对不同类型的值做范围判断 - 格式符使用错误:你写的
%M代表分钟(取值00-59)、%D代表带序数后缀的日期(比如18th),根本输出不了你想要的8位年月日数字串,就算类型匹配结果也完全错误。
可用方案
推荐写法(无格式转换,稳定性最高)
直接用日期构造函数做范围对比,不需要做任何格式转换,只要你的date字段在数据源中被识别为日期类型即可正常运行,性能也更好:
CASE WHEN (date >= DATE(2019,2,18) AND date <= DATE(2019,2,19)) OR (date >= DATE(2022,2,20) AND date <= DATE(2022,2,22)) THEN 'presidents_day' ELSE NULL END
兼容你原有思路的写法
如果一定要用年月日数字串的BETWEEN逻辑,需要修正格式符,同时把函数返回的文本强转为数字,保证运算符两边类型一致:
CASE WHEN CAST(FORMAT_DATETIME("%Y%m%d", date) AS NUMBER) BETWEEN 20190218 AND 20190219 OR CAST(FORMAT_DATETIME("%Y%m%d", date) AS NUMBER) BETWEEN 20220220 AND 20220222 THEN 'presidents_day' ELSE NULL END
注意:日期格式符里
%m代表两位数字的月份(01-12)、%d代表两位数字的月内日期(01-31),不要和代表分钟的%M、代表带后缀日期的%D混淆。
两种写法的输出结果完全符合预期:2019年2月18日、2月19日,2022年2月20日、2月21日、2月22日会被标记为presidents_day,其余日期返回空值。
内容的提问来源于stack exchange,提问作者Zach Scheimer
相关产品推荐
相关产品推荐

