从BigQuery上的周数中提取日期

时间:2017-06-20 13:42:20

标签: google-bigquery google-cloud-platform date-parsing

我有一个包含字符串类型列'YearMonthWeek'的大型数据文件 它包含2016年1月第一周的“20160101”或2016年第40周的“20161040”值,显然在10月份下降。

现在,我想将这些字符串转换为实际日期,以便将每个YearMonthWeek值转换为,例如该周的第一天。 (无论是周一还是周日,我都不在乎)。

我尝试了以下查询:

PARSE_TIMESTAMP('%Y%m%W', CAST(YearMonthWeek AS STRING)) AS datefield

(有关详细信息,请参阅this文档) 这样运行没有错误,但是每个单独的条目返回我一个月的第一天......

所以例如'20160101'和'20160102'都被解析为2016-01-01 00:00:00 UTC。

这是PARSE_TIMESTAMP函数的问题,还是我遗漏了什么?

1 个答案:

答案 0 :(得分:4)

尝试做类似

的事情
DATE_ADD(date_expression, INTERVAL %W WEEK)

静态示例:

SELECT
  DATE_ADD(
          DATE(PARSE_TIMESTAMP('%Y', SUBSTR(CAST('20161252' AS STRING),0,4))),
          INTERVAL (CAST(SUBSTR(CAST('20160102' AS STRING),7) AS INT64)) week) 
        AS datefield

-

Row datefield    
1   2016-01-15  

根据ISO 8601,你可以添加一些作为保证金的东西,一年的第一周是包含1月4日的那一周。所以你可以有类似的东西:4 + 7 *($ week - 1)