bigquery 使用时区转换字符串日期时间

Posted

技术标签:

【中文标题】bigquery 使用时区转换字符串日期时间【英文标题】:bigquery converting the string datetime with timezone 【发布时间】:2018-03-20 05:54:06 【问题描述】:

bigquery 中包含 TB 数据的表将多个列设置为字符串格式,但实际上它们包含日期时间字符串,例如

2016-10-24 15:00:00

我尝试了this link 的回答,将字段转换(CAST)为时间戳格式,如下所示

SELECT
   CAST( MURDER_DATE AS TIMESTAMP) AS CONVERTED_MURDER_DATE, *
FROM `death_list`;

这可行,但它将所有字符串转换为具有 UTC 时区的时间戳,如下所示

2007-03-23 15:00:00.000 UTC

我需要不同时区的数据。有什么线索吗?

【问题讨论】:

【参考方案1】:

尝试使用

DATETIME(CAST( MURDER_DATE AS TIMESTAMP), "Australia/Sydney"))

【讨论】:

【参考方案2】:

在我看来,这似乎是 BigQuery 的当前限制:

Timestamp 类型始终以 UTC 格式存储。而且您无法向其中添加任何“时区”信息。 日期时间 类型也不存储有关时区的任何信息。您仍然可以在您的团队/公司中有一个内部约定,即所有 Datetime 列都存储在您当地的时区中,但我个人觉得这很尴尬。

到目前为止,我们公司已决定以时间戳(因此为 UTC 格式)存储所有内容,并且由于时区缺乏精确性,我们从不使用 Datetime。然后,如果客户端想要获取另一个时区的信息,它必须在读取数据时自己进行转换。

【讨论】:

以上是关于bigquery 使用时区转换字符串日期时间的主要内容,如果未能解决你的问题,请参考以下文章

将时间戳转换为特定时区然后在 bigquery 中将其转换为日期时出现问题

BigQuery转换为不同的时区

将 ISO 8601 日期时间字符串转换为 **Date** 对象时,如何将日期时间重新定位到当前时区?

iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?

PostgreSQL:将字符串转换为没有时区的时间戳以更改时间日期时,我得到了意想不到的结果

Bigquery 中的错误日期格式从字符串更改为日期