4

Postgresからデータを取得したい。タイムゾーンのないタイプtimestampの列があります。Simple SELECTはフォーマットされた日付を返しますが、単純にミリ秒単位のタイムスタンプが必要です。SQLでそれを行うにはどうすればよいですか?

4

1 に答える 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'

精度に関する注意

extractPostgresの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 に答える