エリオットの答えに補遺として、私はタイムゾーンの数学は、夏時間の変更を中心に働いていたかどうかをテストしたかった:
#standardSQL
WITH dates AS (
SELECT TIMESTAMP('2015-07-01') x, 'summer' season
UNION ALL SELECT TIMESTAMP('2015-01-01') x, 'winter' season
)
SELECT
season,
time_zone,
DATETIME_DIFF(DATETIME(x, time_zone),
DATETIME(x), HOUR) AS hours_from_utc
FROM UNNEST(['America/Los_Angeles', 'America/New_York']) AS time_zone
CROSS JOIN dates
ORDER BY 1,2
それがない:
+--------+---------------------+----------------+
| season | time_zone | hours_from_utc |
+--------+---------------------+----------------+
| summer | America/Los_Angeles | -7 |
| summer | America/New_York | -4 |
| winter | America/Los_Angeles | -8 |
| winter | America/New_York | -5 |
+--------+---------------------+----------------+
それはチリがなかったことにも注意してくださいだが2015年にDSTを実行:
#standardSQL
WITH dates AS (
SELECT TIMESTAMP('2014-07-01') x
UNION ALL SELECT TIMESTAMP('2015-07-01') x
UNION ALL SELECT TIMESTAMP('2016-07-01') x
)
SELECT
EXTRACT(YEAR FROM x),
time_zone,
DATETIME_DIFF(DATETIME(x, time_zone),
DATETIME(x), HOUR) AS hours_from_utc
FROM UNNEST(['Chile/Continental', 'America/New_York']) AS time_zone
CROSS JOIN dates
ORDER BY 2,2
+------+-------------------+----------------+
| f0_ | time_zone | hours_from_utc |
+------+-------------------+----------------+
| 2014 | America/New_York | -4 |
| 2015 | America/New_York | -4 |
| 2016 | America/New_York | -4 |
| 2014 | Chile/Continental | -4 |
| 2015 | Chile/Continental | -3 |
| 2016 | Chile/Continental | -4 |
+------+-------------------+----------------+
私はSQL/BigQueryのnewbですので、クエリ内に独自の関数を記述することもできませんでした。 Googleがこれを組み込み関数として追加しない限り、これは行わなければならないと思う。 – dnaeye
追加するだけで、文字列を返し、タイムゾーンを処理できる 'format_timestamp'もあります - https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#format_timestamp –