gpt4 book ai didi

sql - 在 BigQuery 中将时间戳转换为不同的时区

转载 作者:行者123 更新时间:2023-12-04 01:49:18 24 4
gpt4 key购买 nike

我已经梳理了 Google 的 documentation多次,但我似乎找不到一个简单的函数(在 SELECT 查询中)将 UTC 时间戳转换为不同的时区,在我的例子中是太平洋。对于大多数国际时区,我可以简单地使用 TIMESTAMP_SUBTIMESTAMP_ADD 来减去/添加偏移小时数,但美国使用夏令时会使事情变得复杂(不必要!)。

我是否遗漏了文档中的某些内容?还是有其他方法可以轻松转换到另一个时区?

最佳答案

TIMESTAMP 类型与 UTC 相关联。当您将 TIMESTAMP 转换为与特定时区无关的其他类型时,例如 STRINGDATE DATETIME,您可以指定转换的时区,例如:

SELECT EXTRACT(DATE FROM CURRENT_TIMESTAMP()
AT TIME ZONE 'America/Los_Angeles') AS current_pst_day;

如果您想要不同时区之间的(当前)小时数,您可以将 CURRENT_DATETIME() 与不同时区一起使用并获取差异:

SELECT
time_zone,
DATETIME_DIFF(CURRENT_DATETIME(time_zone),
CURRENT_DATETIME(), HOUR) AS hours_from_utc
FROM UNNEST(['America/Los_Angeles', 'America/New_York']) AS time_zone;
+---------------------+----------------+
| time_zone | hours_from_utc |
+---------------------+----------------+
| America/Los_Angeles | -8 |
| America/New_York | -5 |
+---------------------+----------------+

为了让偏移更方便,你可以把它包装成一个 SQL 函数,然后调用它来将偏移添加到特定的时间戳:

CREATE TEMP FUNCTION OffsetForTimeZone(t TIMESTAMP, time_zone STRING) AS (
TIMESTAMP_ADD(t, INTERVAL DATETIME_DIFF(CURRENT_DATETIME(time_zone),
CURRENT_DATETIME(), HOUR) HOUR)
);

SELECT OffsetForTimeZone(CURRENT_TIMESTAMP(), 'America/Los_Angeles');

请记住,这样做的结果仍然是与 UTC 相关联的 TIMESTAMP,尽管会被该时间与太平洋时间之间的当前差异抵消。

关于sql - 在 BigQuery 中将时间戳转换为不同的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41574300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com