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
。
@jwadsack - 注意:这篇文章适用于 BigQuery Legacy SQL,而您引用的是标准 SQL。仍然 - 如果您喜欢它,请考虑投票:o)
@MikhailBerlyant 刚刚意识到这一点。 :) 赞成,因为它适用于 Legacy。为什么 BigQuery 网络用户界面默认为旧版并隐藏复选框来更改它,我不知道。【参考方案2】:
这个解决方案对我不起作用:
DATE(Date) = "2016-07-11"
相反,我不得不使用:
Date = TIMESTAMP("2016-07-11")
【讨论】:
这只是意味着您的字段不是问题的日期类型,而是时间戳!以上是关于BigQuery - 如何比较“日期”列(使用旧版 SQL)?的主要内容,如果未能解决你的问题,请参考以下文章
在 BigQuery 中,您将如何使用两个日期列计算每月和每日总计?
如何将 AVRO 文件中的整数值加载到 bigquery 中的日期列?