BigQuery - 如何比较“日期”列(使用旧版 SQL)?

Posted

技术标签:

【中文标题】BigQuery - 如何比较“日期”列(使用旧版 SQL)?【英文标题】:BigQuery - how to compare a "date" column (using legacy SQL)? 【发布时间】:2016-12-28 18:59:55 【问题描述】:

我有一个 BigQuery 表,其中包含 Date 列,该列是 date 类型。我正在尝试运行此查询:

SELECT * FROM dataset.table_name WHERE Date = "2016-07-11"

这会引发错误:

Argument type mismatch in function EQUAL: 'Date' is type int32, '2016-07-11' is type string

我也试过这个查询:

SELECT * FROM dataset.table_name WHERE Date = TIMESTAMP("2016-07-11")

但这会返回 0 个结果,尽管我的表在 Date 列中至少包含一条具有此值 (2016-07-11) 的记录。

那么,如何比较 BigQuery 中的 date 字段?

【问题讨论】:

【参考方案1】:

下面试试

WHERE DATE(Date) = "2016-07-11"

我的额外建议是不要使用保留字作为列名,我认为如果您的列命名正确 - 您原来的 WHERE 子句将完美运行,您不需要使用 DATE()="" 的解决方法

【讨论】:

这行得通,谢谢:) 我还设法使用WHERE CAST(Date as STRING) = "2016-07-11" 使它工作。我尝试使用不同的列名,但原始查询仍然抛出 argument type mismatch 错误。 接受你的回答。谢谢你:) 感谢您的解决方案。 FWIW,DATE 未在the list of reserved words 中列出。并且更改列名似乎并没有改变错误。奇怪的是模式显示列类型是DATE @jwadsa​​ck - 注意:这篇文章适用于 BigQuery Legacy SQL,而您引用的是标准 SQL。仍然 - 如果您喜欢它,请考虑投票:o) @MikhailBerlyant 刚刚意识到这一点。 :) 赞成,因为它适用于 Legacy。为什么 BigQuery 网络用户界面默认为旧版并隐藏复选框来更改它,我不知道。【参考方案2】:

这个解决方案对我不起作用:

DATE(Date) = "2016-07-11"

相反,我不得不使用:

Date = TIMESTAMP("2016-07-11")

【讨论】:

这只是意味着您的字段不是问题的日期类型,而是时间戳

以上是关于BigQuery - 如何比较“日期”列(使用旧版 SQL)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 bigquery 从日期列中仅查找星期日

在 BigQuery 中,您将如何使用两个日期列计算每月和每日总计?

在 BigQuery 中生成一列随机日期

如何将 AVRO 文件中的整数值加载到 bigquery 中的日期列?

BigQuery:将 mm/yyyy 日期与特定日期和 CURRENT_DATE 进行比较

如何使用 BigQuery 旧版 sql 查询相同的重复字符串字段以获取多个值?