Date 连接BigQuery和Google Sheets-日期参数问题

Date 连接BigQuery和Google Sheets-日期参数问题,date,google-sheets,google-bigquery,Date,Google Sheets,Google Bigquery,接下来,我开始创建一个从BigQuery读取数据的电子表格,但我在处理与日期值相关的参数时遇到了一个问题 在第一张工作表中,我创建了两个单元格,其中包含两个参数,即日期间隔的开始和结束,以及正确的值。两个单元格的格式均为“日期”值 在第二个工作表中,我配置了BigQueryConnector,在本例中,我使用了一个带有日期的公共数据集bigquery公共数据.实用工具\欧盟日期\格雷格 从BigQuery连接器向导中,我添加了: "STARTDATE" as "PARAMETERS!B1" "E

接下来,我开始创建一个从BigQuery读取数据的电子表格,但我在处理与日期值相关的参数时遇到了一个问题

在第一张工作表中,我创建了两个单元格,其中包含两个参数,即日期间隔的开始和结束,以及正确的值。两个单元格的格式均为“日期”值

在第二个工作表中,我配置了BigQueryConnector,在本例中,我使用了一个带有日期的公共数据集<代码>bigquery公共数据.实用工具\欧盟日期\格雷格

从BigQuery连接器向导中,我添加了:

"STARTDATE" as "PARAMETERS!B1"
"ENDDATE" as "PARAMETERS!B2"
完成此配置后,将生成以下查询:

SELECT
  date,
  date_str,
  date_int

FROM `bigquery-public-data.utility_eu.date_greg` 

WHERE date > DATE(@STARTDATE) AND date < DATE(@ENDDATE)

LIMIT 10
据我所知,“日期”单元格是以数字形式检索的,因此直接解析不起作用。经过几次测试,我明白了给定的int值是我可以获得的数字,将单元格格式更改为“number”。 如果将单元格值从日期转换为数字,则会得到以下值:

01/05/2019 -> 43.586
31/05/2019 -> 43.616
这个号码是多少?它不是毫秒,而是每隔一天增加1。为了创建能够解析这个int的适当查询,我需要理解这个int是什么(当然,我可以将单元格作为“文本”处理并直接写入时间戳值,但我更希望使用本机日期格式,以便使用内置日历)

我的考虑是(用简单的数学)这个数字指的是自
30/12/1899
以来的天数,但它非常奇怪(而且,在此之前的每个日期都是0),所以我直接问你如何处理这个值。根据我对数字计数器何时开始(30/12/1899)的理解,我创建了此查询,其中添加了从单元格检索到的编号:

SELECT *

FROM `bigquery-public-data.utility_eu.date_greg`

WHERE 
  date >= DATE_ADD(DATE("1899-12-30"), INTERVAL @DATAINIZIO DAY)
  AND date <= DATE_ADD(DATE("1899-12-30"), INTERVAL @DATAFINE DAY)
选择*
来自“bigquery-public-data.utility\u eu.date\u greg”`
哪里
日期>=日期(日期(“1899-12-30”),时间间隔@数据化日)
日期
这个数字是多少?它不是毫秒,它每隔一天增加1

这就是所谓的序列号,表示从“最开始”起的天数
谷歌的电子表格日期日历从1900-01-01开始,这被视为“非常开始”

为了创建能够解析这个int的正确查询,我需要理解这个int是什么


有了上述信息,您可以调整日期计算,使之与BigQuery所期望的同步

您提到您的字段已经是日期格式,可能您正在查询中进行额外的解析

尝试在不使用日期函数的情况下执行此操作

此外,我还发现了另一个文档,它不仅与连接有关,而且可能会有所帮助:。

电子表格(Google、Excel等)将日期存储为从开始日期起经过的天数,分数天表示时间

From:“Excel将日期和时间存储为一个数字,表示自1900年1月0日起的天数,加上24小时工作日的小数部分:ddddd.tttttt。这称为序列日期或序列日期时间。”

现在,您必须了解在查询中按日期筛选的方法:

  • 在查询中,您可以使用DATE_ADD将天数(单元格值)添加到基准日期。(小心,DATE_ADD取INT,并且日期值为float,因此需要先进行强制转换)
  • (首选)在电子表格上使用文本(单元格“yyy-mm-dd”),这样就可以在BigQuery查询中使用日期()

  • 我使用第二种方法,虽然您需要额外的单元格(除非您直接将日期存储为YYYY-MM-DD;使查询比在其中添加cast和date_更干净。还可以避免上述链接中解释的“1904问题”。

    另请注意-我认为此功能(连接表)还在早期BetaI不知道是否测试版,除了介绍该功能的博客页面之外,我找不到任何文档。最后,我已经用添加日期进行的BQ查询似乎是解决这个问题的最快方法
    有了上述信息,你可以调整日期计算,使之与大的数据同步查询期望这是我所做的,你可以在我的查询中读取,但是我用30-12作为开始点,正如你提到的,没有01-01。我想知道它是否是处理这种需要的正确方法。我明白了!不知怎么地,我完全错过了你的问题的最后一部分,并把注意力集中在你认为是主要的帖子中间的问题上。问题。无论如何-是的-我不知道为什么,但技术上使用“1899-12-30”在像您这样的查询中,您的链接与另一种操作相关,即作为联邦数据源从BigQuery访问工作表数据。我正在使用新的内置连接器工作表从BigQuery检索数据。查询中没有解析,我只使用参数
    
    SELECT *
    
    FROM `bigquery-public-data.utility_eu.date_greg`
    
    WHERE 
      date >= DATE_ADD(DATE("1899-12-30"), INTERVAL @DATAINIZIO DAY)
      AND date <= DATE_ADD(DATE("1899-12-30"), INTERVAL @DATAFINE DAY)