GCP中如何排除过去日期?过滤语句报错求助
在GCP BigQuery中排除过去日期的解决方案
你的SQL语句报错,大概率是数据类型不匹配或保留字未转义导致的,以下分场景给出修正方案:
场景1:日期列是标准DATE类型
BigQuery中Date是保留字,必须用反引号包裹列名;另外如果要保留当前日期(仅排除过去),建议用>=而非>:
SELECT * FROM `你的项目ID.你的数据集ID.目标表名` WHERE `Date` >= CURRENT_DATE()
场景2:日期列是字符串类型(如'2024-05-20'格式)
需要先将字符串转换为DATE类型再比较,注意转换格式要和你的字符串日期格式一致:
-- 示例:字符串格式为'YYYY-MM-DD' SELECT * FROM `你的项目ID.你的数据集ID.目标表名` WHERE PARSE_DATE('%Y-%m-%d', `Date`) >= CURRENT_DATE() -- 如果是'DD/MM/YYYY'格式,修改为: SELECT * FROM `你的项目ID.你的数据集ID.目标表名` WHERE PARSE_DATE('%d/%m/%Y', `Date`) >= CURRENT_DATE()
场景3:日期列是DATETIME或TIMESTAMP类型
如果是DATETIME类型,可直接用CURRENT_DATETIME()比较,或转换为DATE类型:
-- 直接比较DATETIME SELECT * FROM `你的项目ID.你的数据集ID.目标表名` WHERE `Date` >= CURRENT_DATETIME() -- 转换为DATE类型比较 SELECT * FROM `你的项目ID.你的数据集ID.目标表名` WHERE DATE(`Date`) >= CURRENT_DATE()
如果是TIMESTAMP类型,同样可以转换为DATE后比较:
SELECT * FROM `你的项目ID.你的数据集ID.目标表名` WHERE DATE(`Date`) >= CURRENT_DATE()
常见报错原因排查
- 未转义保留字:
Date是BigQuery保留字,必须用反引号`包裹 - 数据类型不匹配:字符串、DATETIME不能直接和DATE类型的CURRENT_DATE()比较,需转换类型
- 表路径不完整:非默认项目/数据集下,必须写全
项目ID.数据集ID.表名
内容的提问来源于stack exchange,提问作者Pratikp
相关产品推荐
相关产品推荐

