web-dev-qa-db-ja.com

postgresqlでタイムスタンプとしてbigint(ミリ秒単位のタイムスタンプ)値を書き込む方法

私はタイムゾーンフィールドに私の値をタイムスタンプに保存しようとしています。 1970年からミリ秒単位です。

select TO_CHAR(TO_TIMESTAMP(1401432881230), 'DD/MM/YYYY HH24:MI:SS.MS')

30/5/2014 11:29:42 10:54:41.230が必要ですが、22/08/46379 23:27:02.000を取得します

14
Clyde

nixタイムスタンプ 秒で時間を測定し、notミリ秒(mostlyすべての場所で、PostgreSQLでも)。

したがって、呼び出す必要があります

SELECT TO_TIMESTAMP(1401432881230 / 1000);

ミリ秒を保持したい場合は、double precision

SELECT TO_TIMESTAMP(1401432881230::double precision / 1000);
36
pozs

これは、msをタイムスタンプに変換し、msではなく秒を維持する方法です。受け入れられた応答はmsをドロップします。

WITH ts AS (SELECT 1401432881230 AS ts)
SELECT to_timestamp(ts / 1000) + ((ts % 1000 ) || ' milliseconds') :: INTERVAL
FROM ts;

-- FOR ALTER COLUMN
ALTER TABLE  my_info
  ALTER COLUMN tstmp TYPE TIMESTAMP USING to_timestamp(tstmp / 1000) + ((tstmp % 1000) || ' milliseconds') :: INTERVAL;
0
wener