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)?的主要内容,如果未能解决你的问题,请参考以下文章