ここでつまずく人へ:
タイムスタンプを別のタイムゾーンに変換するにはどうすればよいですか?
作成されたTIMESTAMP値はUTCとして保存され、TIMESTAMPにはコンストラクター(TIMESTAMP、STRING)がない場合、タイムスタンプを最初にDATETIMEに変換してから、から新しいTIMESTAMPを作成することにより、タイムスタンプを別のタイムゾーンに変換できます。新しいタイムゾーンのDATETIME:
SELECT TIMESTAMP(DATETIME(timestamp_field, '{timezone}'))
例:
SELECT
input_tz,
input,
'America/Montreal' AS output_tz,
TIMESTAMP(DATETIME(input,'America/Montreal')) AS output
FROM (
SELECT 'US/Pacific' AS input_tz, TIMESTAMP(DATETIME(DATE(2021, 1, 1), TIME(16, 0, 0)), 'US/Pacific') AS input
UNION ALL
SELECT 'UTC' AS input_tz, TIMESTAMP(DATETIME(DATE(2021, 1, 1), TIME(16, 0, 0)), 'UTC') AS input
UNION ALL
SELECT 'Europe/Berlin' AS input_tz, TIMESTAMP(DATETIME(DATE(2021, 1, 1), TIME(16, 0, 0)), 'Europe/Berlin') AS input
) t
結果:
行 |
input_tz |
入力 |
output_tz |
出力 |
1 |
米国/太平洋 |
2021-01-02 00:00:00 UTC |
アメリカ/モントリオール |
2021-01-01 19:00:00 UTC |
2 |
UTC |
2021-01-01 16:00:00 UTC |
アメリカ/モントリオール |
2021-01-01 11:00:00 UTC |
3 |
ヨーロッパ/ベルリン |
2021-01-01 15:00:00 UTC |
アメリカ/モントリオール |
2021-01-0110:00:00 UTC |
DATETIME値からタイムゾーン情報を取り除く方法は?
BigQueryのDATETIMEはタイムゾーンが単純であるため、タイムゾーン情報は含まれていません。そうは言っても、DATETIMEのタイムゾーンを知ることができるビジネス知識がある場合は、既知のタイムゾーンを持つTIMESTAMPに変換することで、そのタイムゾーンオフセットを取り除くことができます。
SELECT TIMESTAMP(datetime_value, '{timezone}')
TIMESTAMPが値をUTCで保存することを考えると、それが好ましい保存方法である場合はDATETIMEに再変換できますが、これでDATETIMEがUTCであることがわかります:)
うまくいけば、これが役立つことがあります!:)