BigQuery CASE语句语法错误求助:提示预期输入结束却遇CASE关键字
BigQuery SQL语法错误修复建议
你的SQL代码存在三个语法/逻辑问题,导致报错,逐一修正如下:
- SELECT子句格式错误:
SELECT *后缺少逗号,BigQuery会认为SELECT子句已结束,无法识别后续的CASE语句,需添加逗号分隔原有字段和新增计算字段。 - WHEN条件后多余逗号:多个
WHEN行里的THEN前多了逗号(比如WHEN Plan='1 Class Pass', THEN),这是语法错误,必须删除这些逗号。 - ELSE值类型不匹配:原代码用
"null"字符串,但DATE_ADD返回日期类型,字符串和日期类型冲突,应改用无引号的NULL空值。
修正后的完整代码:
SELECT *, CASE WHEN Plan='1 Class Pass' THEN DATE_ADD(DATE(Date), INTERVAL 3 MONTH) WHEN Plan='10 Class Pass' THEN DATE_ADD(DATE(Date), INTERVAL 3 MONTH) WHEN Plan='20 Class Pass' THEN DATE_ADD(DATE(Date), INTERVAL 3 MONTH) WHEN Plan='40 Class Pass' THEN DATE_ADD(DATE(Date), INTERVAL 3 MONTH) WHEN Plan='1 MONTH UNLIMITED' THEN DATE_ADD(DATE(Date), INTERVAL 1 MONTH) WHEN Plan='3 MONTH UNLIMITED' THEN DATE_ADD(DATE(Date), INTERVAL 3 MONTH) ELSE NULL END AS expire_date FROM `table_Transactions`
另外可以优化重复条件,把返回3个月有效期的产品合并,让代码更简洁:
SELECT *, CASE WHEN Plan IN ('1 Class Pass', '10 Class Pass', '20 Class Pass', '40 Class Pass', '3 MONTH UNLIMITED') THEN DATE_ADD(DATE(Date), INTERVAL 3 MONTH) WHEN Plan='1 MONTH UNLIMITED' THEN DATE_ADD(DATE(Date), INTERVAL 1 MONTH) ELSE NULL END AS expire_date FROM `table_Transactions`
内容的提问来源于stack exchange,提问作者user19984115
相关产品推荐
相关产品推荐

