Redshift で UNIX time を TIMESTAMP (タイムゾーン有) に変換する
Amazon Redshift で時刻が UNIX time で記録されており TIMESTAMP 型に直したくて悩んだ。integer なので CAST
が使えない。
で、結論から言うとこう。
select *, CONVERT_TIMEZONE('JST', TIMESTAMP 'epoch' + unix_time * INTERVAL '1 second') time_stamp from user limit 1;
postgreSQL自体の再起動が許されるのであれば、以下でタイムゾーンを設定してから再起動でタイムゾーン変更ができるらしい。タイムゾーンの設定が合っていれば CONVERT_TIMEZONE
が不要になる。
timezone = JST-9
参考: * PostgreSQLのデフォルトのタイムゾーン - かずきのBlog@hatena * CAST 関数および CONVERT 関数 - Amazon Redshift
6/23 追記
DATE_ADD を使うやり方がありました。こっちの方が覚えやすそう。
select *, DATE_ADD('second', "time", '1970-01-01 09:00:00') time_stamp from gacha limit 1;