BigQueryの日付関数でタイムゾーン指定はサマータイムが反映される

日本では馴染みがないサマータイム。
例として、タイムゾーンと日時を指定してBigQueryのデータを可視化するアプリケーションがあったとします。
その場合、バックエンドで実行されるクエリには、DATETIMEやTIMESTAMPなどの関数が含まれ、タイムゾーンを指定して使用すると思います。

DATETIMEやTIMESTAMPなどの関数に、タイムゾーンを指定すると各タイムゾーンのサマータイム期間中はサマータイムが反映される状態になります。
例として、ロンドンのサマータイムで説明します。2021年のロンドンのサマータイムは下記の期間になります。
2021-03-28 00:00 〜 2021-10-31 01:00	

期間外と期間内の日付で試してみます。

SELECT
  DATETIME("2021-03-27 00:00:00", "Europe/London")
  
2021-03-27T00:00:00 ← 期間外なのでそのまま

SELECT
  DATETIME("2021-03-28 01:00:00", "Europe/London")
  
2021-03-28T02:00:00 ← 期間内なので1時間進んでいる

サマータイムを適用しないクエリの書き方

サマータイムの反映が不要な場合は、日付関数でタイムゾーンの指定ではなく、時差を指定する事でサマータイムが反映されません

SELECT  
  DATETIME_ADD("2021-03-28 01:00:00", INTERVAL 0 HOUR)
  
2021-03-28T01:00:00 ← 期間内だがサマータイムは反映されていない

コメント

このブログの人気の投稿

BigQuery テーブルの有効期限を設定する

Cloud Schedulerは必ず実行されるわけではない

ChromebookでAndroidアプリをインストールする方法