努力从 BigQuery SQL 中的时间戳字段中提取特定月份的 DATE

Posted

技术标签:

【中文标题】努力从 BigQuery SQL 中的时间戳字段中提取特定月份的 DATE【英文标题】:Struggling to extract a specific month of DATE(s) from a Timestamp field in BigQuery SQL 【发布时间】:2021-01-16 03:03:48 【问题描述】:

本周刚开始我的第一份数据分析师工作! 我的第一个 bigquery 遇到了很多问题: 我需要以某种方式从时间戳字段中提取一组特定的日期。

具体来说: 我需要从时间戳数据中提取 12 月的所有日期,即 2020 年 12 月 1 日 - 2020 年 12 月 31 日的范围。我尝试了另外两个 *** 条目中的公式:

我忘了包括数据的外观:2020-12-12 16:36:58.944 UTC,只是想找回日期“2020-12-2-01 - 2020-12” -31' 最终。

1. Extracting date from timestamp in Bigquery: a preferable method 2. BigQuery: extract date from datetime with timezone

我尝试过的代码 选择 EXTRACT(DATE FROM PARSE_TIMESTAMP('%m/%d/%Y %H:%M:%S %Z %z', '11/27/2019 14:40:15 CET +0100')) 作为日期 em>

我不明白如何仅提取时间戳的日期部分,然后如何仅提取或排列日期,以便我的查询仅返回 12 月份的值。

停下!我尝试使用 Extract 函数和 Trunc 函数,但没有任何效果。

我仍在学习提出问题的正确/最容易理解的方式,因此欢迎所有提示澄清!

【问题讨论】:

【参考方案1】:

考虑下面

select *, 
from `project.dataset.table`
where date_trunc(date(parse_timestamp('%m/%d/%Y %H:%M:%S %Z %z',ts)),month)='2020-12-01'     

要测试,玩上面你可以使用下面的玩具示例

with `project.dataset.table` as (
    select 1 id, '11/27/2020 14:40:15 CET +0100' ts union all 
    select 2, '11/29/2020 14:40:15 CET +0100' union all 
    select 3, '11/30/2020 14:40:15 CET +0100' union all 
    select 4, '12/10/2020 00:20:15 CET +0100' union all 
    select 5, '12/20/2020 00:40:15 CET +0100' union all 
    select 6, '12/25/2020 14:40:15 CET +0100' union all 
    select 7, '12/27/2020 14:40:15 CET +0100' union all 
    select 8, '01/02/2021 14:40:15 CET +0100' union all 
    select 9, '01/04/2021 14:40:15 CET +0100' 
)
select *, 
    date(parse_timestamp('%m/%d/%Y %H:%M:%S %Z %z', ts)) date,
    date_trunc(date(parse_timestamp('%m/%d/%Y %H:%M:%S %Z %z', ts)), month) month
from `project.dataset.table`
where date_trunc(date(parse_timestamp('%m/%d/%Y %H:%M:%S %Z %z',ts)),month)='2020-12-01'    

有输出

【讨论】:

以上是关于努力从 BigQuery SQL 中的时间戳字段中提取特定月份的 DATE的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 标准 SQL 中将时间戳转换为秒

将五个小时添加到时间戳字段

无法从 BigQuery 中的时间戳中提取日期

从 BigQuery 中的时间戳数据类型中获取每月前 3 个标签数量

从 Avro 将 unix 时间戳(以秒为单位)导入 Bigquery 中的正确时间戳

将时间戳从 Dataframe 加载到 BigQuery 数据集