Postgresからデータを取得したい。タイムゾーンのないタイプtimestampの列があります。Simple SELECTはフォーマットされた日付を返しますが、単純にミリ秒単位のタイムスタンプが必要です。SQLでそれを行うにはどうすればよいですか?
質問する
4304 次
1 に答える
7
select extract(epoch from my_timestamp)
これは秒単位の時間を返します。ただし、小数点以下1秒未満の10進数です。精度について詳しくは、以下をご覧ください。
ミリスの場合、次を使用します。
select extract(epoch from my_timestamp)*1000
テスト:
select my_date,
extract(epoch from my_date)*interval'1s'+'epoch'::timestamp at time zone 'GMT'
精度に関する注意
extract
Postgresの15桁に収まる「倍精度」の数値を返します。これは、2016年頃(私がこれを書いている時点で)、実際の精度は10マイクロ秒であることを意味します。最後の桁を四捨五入する方法に注意してください。
select extract('epoch' from '2016-09-20T11:22:33.456789Z'::timestamp);
date_part
------------------
1474370553.45679
(1 row)
270年先のような日付の場合、このデータ型は100マイクロ秒の精度しか表現できません。2016年の観点からはまともな精度のように思えますが、その年に達する前に状況が少し変わる可能性があると思います。
select extract('epoch' from '2290-09-20T11:22:33.456789Z'::timestamp);
date_part
------------------
10120936953.4568
(1 row)
いずれにせよ、しばらくの間、ミリ秒の精度で問題なく動作し続けます。
于 2010-08-03T09:23:37.350 に答える