Google Cloud SpannerでFORMAT_TIMESTAMP関数使うと時間がずれる
SpannerにUTCでTIMESTAMP型で保存されてるデータをJSTに戻そうとしたときにはまった。
SELECT TIMESTAMP "2017-08-20 20:00:00 UTC" AS ORIGIN_UTC, TIMESTAMP_ADD(TIMESTAMP "2017-08-20 20:00:00 UTC", INTERVAL 9 HOUR) AS DateTime_9_Plus, FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP_ADD(TIMESTAMP "2017-08-20 20:00:00 UTC", INTERVAL 9 HOUR)) AS DateTime_WITH_TIME_9_Plus_FORMATED, FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP_ADD(TIMESTAMP "2017-08-20 20:00:00 UTC", INTERVAL (8 + 9) HOUR)) AS DateTime_8_Plus_9_FORMATED
ORIGIN_UTC | DateTime_9_Plus | DateTime_WITH_TIME_9_Plus_FORMATED | DateTime_8_Plus_9_FORMATED |
---|---|---|---|
2017-08-20T20:00:00Z | 2017-08-21T05:00:00Z | 2017-08-20 22:00:00 (なぜかずれる) | 2017-08-21 05:00:00 (8時間を補正分としていれてズレを戻す |
よくわからんが、内部で太平洋標準時(たいへいようひょうじゅんじ、Pacific Standard Time: 略称PST)+8:00が影響してるとかしてないとか? www.en.advertisercommunity.com
FORMAT_TIMESTAMP関数の第三引数で"+9:00"のように指定しないとだめだった。
FORMAT_TIMESTAMP(format_string, timestamp[, time_zone])
でも、Data Studio使ったときに期間指定すると
(FORMAT_TIMESTAMP('%Y%m%d', t0.DateTime) >= '20181201' AND FORMAT_TIMESTAMP('%Y%m%d', t0.DateTime) <= '20181231')
みたいなクエリになっちゃうので、上記のように手動で8を足しこんだカラムにしないとだめだった