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


我有一个带有列的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结果,尽管我的表包含至少一个具有此值的记录(2016-07-11) 在里面 Date 柱。

那么,我怎么能比较一个 date BigQuery中的字段?


10664
2017-08-22 09:31


起源



答案:


试试以下

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

我的额外建议是不要使用保留字作为列的名称,我想如果您的列名称正确 - 您的原始名称 WHERE 子句将完美地工作,你不需要使用变通方法 DATE()=""


15
2017-08-22 12:57



这工作,谢谢:)我也设法使其工作使用 WHERE CAST(Date as STRING) = "2016-07-11"。我尝试使用不同的列名,但原始查询仍然抛出了 参数类型不匹配 错误。 - rereradu
接受你回答。谢谢 :) - rereradu
谢谢你的解决方案。 FWIW, DATE 未列在 保留字列表。并且更改列名似乎不会更改错误。奇怪的是架构显示列类型是 DATE。 - jwadsack
@jwadsa​​ck - 注意:这篇文章适用于BigQuery Legacy SQL,而您引用的是标准SQL。仍然 - 如果你喜欢,请考虑投票答案:o) - Mikhail Berlyant
@MikhailBerlyant才意识到这一点。 :) Upvoted因为它适用于Legacy。为什么BigQuery Web UI默认为Legacy并隐藏复选框以更改它,我不知道。 - jwadsack


答案:


试试以下

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

我的额外建议是不要使用保留字作为列的名称,我想如果您的列名称正确 - 您的原始名称 WHERE 子句将完美地工作,你不需要使用变通方法 DATE()=""


15
2017-08-22 12:57



这工作,谢谢:)我也设法使其工作使用 WHERE CAST(Date as STRING) = "2016-07-11"。我尝试使用不同的列名,但原始查询仍然抛出了 参数类型不匹配 错误。 - rereradu
接受你回答。谢谢 :) - rereradu
谢谢你的解决方案。 FWIW, DATE 未列在 保留字列表。并且更改列名似乎不会更改错误。奇怪的是架构显示列类型是 DATE。 - jwadsack
@jwadsa​​ck - 注意:这篇文章适用于BigQuery Legacy SQL,而您引用的是标准SQL。仍然 - 如果你喜欢,请考虑投票答案:o) - Mikhail Berlyant
@MikhailBerlyant才意识到这一点。 :) Upvoted因为它适用于Legacy。为什么BigQuery Web UI默认为Legacy并隐藏复选框以更改它,我不知道。 - jwadsack


这个解决方案不适合我:

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

相反,我不得不使用:

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

0
2017-11-08 04:45



它只是意味着您的字段不是日期类型,而是时间戳! - Mikhail Berlyant
数据类型很重要:o) - Mikhail Berlyant