如何在 Google BigQuery 中将日期解析为周年?

Posted

技术标签:

【中文标题】如何在 Google BigQuery 中将日期解析为周年?【英文标题】:How can I parse a date as week-year in Google BigQuery? 【发布时间】:2020-02-05 14:08:55 【问题描述】:

我需要选择两组数据——一组来自上周,另一组来自去年同一周。

我看到这个工作的方式是提取周数,所以

SELECT EXTRACT(WEEK FROM DATE_FIELD)

然后我根据上周一得到去年的年份值,就像这样

SELECT DATE_SUB(
                DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY), WEEK(MONDAY)), 
               INTERVAL 1 YEAR)

我已经设法将这些值连接在一起,以便它们以 %Y-%W 的格式表示日期。例如。 2019-03

但是,使用 PARSE_DATE() 函数似乎不适用于在 BigQuery 中解析年周。我已经尝试了一些静态字符串的组合,例如:

SELECT PARSE_DATE("%Y-%W", '2020-53'),
       PARSE_DATE("%Y-%W", '2019-01'),
       PARSE_DATE("%Y-%W", '2018-00')

无论输入什么,日期总是显示为指定年份的 1 月 1 日

Row f0_ f1_ f2_ 
1   
2020-01-01
2019-01-01
2018-01-01

我做错了什么?

【问题讨论】:

您到底想做什么?示例输入/输出行将帮助我们回答您的问题。 PARSE_DATE() 返回一个 DATE 类型,所以不要对他们返回一个日期感到惊讶。至于为什么返回 1 月 1 日,如果函数返回一个日期,而您没有指定月份或日期,它将返回 01 和 01,即 1 月 1 日。 我希望准确得出一年前一周的情况。本周是第 5 周(从 2020 年 2 月 3 日开始),所以我想从 2019 年的第 5 周开始进行比较。原则上,我认为最好的方法是将该周数 (5) 获取为整数并将年份值更改为 2020 减去 1。我已将其作为字符串实现,但解析它是我的问题。 【参考方案1】:

关于如何使用 YEAR-WEEK 格式在 BigQuery 中传递日期的问题,我建议您使用函数 FORMAT_DATE()。

此函数使用两个参数。第一个必须是 STRING,您可以使用此参数选择日期的显示方式。您可以关注this dictionary 帮助您选择最适合您的。在你的情况下,我会使用“%Y-%W”或“%Y-%V”。根据文档:

%V:ISO 8601 一年中的第几周(星期一为第一天) 周)作为十进制数 (01-53)。如果包含一月的周 1 新年有四天或更多天,则为第 1 周;除此以外 这是上一年的第 53 周,下周是​​第 1 周。

%W:一年中的第几周(星期一为一周的第一天) 作为十进制数 (00-53)。

第二个参数必须是DATE格式。

下面是一个带有虚拟数据的语法示例:

with a as (
select '2019-01-01' as date union all 
select '2020-10-21' as date union all
select '2018-08-15' as date 
order by date
)
select  format_date("%Y-%W", cast(date as date)) as date_w,
        format_date("%Y-%V", cast(date as date)) as date_v 
from a

请注意,我使用CAST() 函数将字符串转换为日期格式。输出为:

希望对你有帮助。

【讨论】:

恐怕我的问题是相反的;我无法将已经格式化为 Week-year 的日期转换回正常的日期值。谢谢你的回答,很有帮助 @tonneofash,如果您在实施它时遇到任何问题,我可以提供帮助。

以上是关于如何在 Google BigQuery 中将日期解析为周年?的主要内容,如果未能解决你的问题,请参考以下文章

google-bigquery 在查询结果中将日期格式设置为 mm/dd/yyyy

如何使用 AppScript 在 BigQuery 中将 Google 工作表持久化为表格

如何在数据工作室的 bigquery 中将年份整数解析为日期?

Google Cloud Data Fusion,如何在一个管道中将多个表加载到 bigquery

如何在标准 SQL 中将 Epoch 时间戳转换为日期

在 Google Composer 中将 Bigquery 结果保存为 JSON