Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 从BigQuery上的周数中提取日期_Google Bigquery_Google Cloud Platform_Date Parsing - Fatal编程技术网

Google bigquery 从BigQuery上的周数中提取日期

Google bigquery 从BigQuery上的周数中提取日期,google-bigquery,google-cloud-platform,date-parsing,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 (

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

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

我尝试了以下查询:

PARSE_TIMESTAMP('%Y%m%W', CAST(YearMonthWeek AS STRING)) AS datefield
(有关详细信息,请参阅文档) 它运行时没有错误,但会为每个条目返回一个月的第一天

因此,例如“20160101”和“20160102”都被解析为2016-01-01 00:00:00 UTC


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

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
-


你可以加一些东西作为空白,根据,一年的第一周是包含1月4日的那一周。所以你可以做这样的事情:4+7*($week-1)

试试做这样的事情

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
-


你可以加一些东西作为空白,根据,一年的第一周是包含1月4日的那一周。所以你可以有这样的东西:4+7*($week-1)

可能是重复的,或者可能只是帮你解决这个问题,这很奇怪。我刚刚尝试了
选择PARSE_TIMESTAMP(“%Y%W”,“201640”)
并返回2016-01-01。可能是
%W
解析有问题。是的,您需要释放不必要的月份部分或date@RiggsFolly不起作用,有一个相关的问题。它很可能只启用年和周,但不启用年、月和周。可能是重复的,或者可能只是帮助您解决这一问题。我刚刚尝试了
选择PARSE_TIMESTAMP(“%Y%W”,“201640”)
并返回2016-01-01。可能是
%W
解析有问题。是的,您需要释放不必要的月份部分或date@RiggsFolly不起作用,有一个相关的问题。不过,它很可能只启用年和周,而不启用年、月和周。它在那里工作。MySQL是不同的,它不是基于SQL2011标准的。我很抱歉,squireThis将在1月份有效,但在其他月份会失败。第一部分应仅保留年份,以便间隔添加从1月1日开始。最后使用此部分:
选择日期添加(日期(解析时间戳('%Y',SUBSTR(CAST('20161252'作为字符串),0,4))、间隔(CAST(SUBSTR(CAST('20161252'作为字符串),7)作为INT64))作为日期字段
Thx很多!这个问题是针对Google BigQuery的。它在那里工作。MySQL是不同的,它不是基于SQL2011标准的。我很抱歉,squireThis将在1月份有效,但在其他月份会失败。第一部分应仅保留年份,以便间隔添加从1月1日开始。最后使用此部分:
选择日期添加(日期(解析时间戳('%Y',SUBSTR(CAST('20161252'作为字符串),0,4))、间隔(CAST(SUBSTR(CAST('20161252'作为字符串),7)作为INT64))作为日期字段
Thx很多!