CodingReptile

ゆるゆると技術に関するメモを貯めていく

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;