How to write bigint (timestamp in milliseconds) value as timestamp in postgresql

后端 未结 3 1713
再見小時候
再見小時候 2021-02-07 10:44

I\'m trying to store in timestamp with timezone field my value. It is in milliseconds from 1970.

select TO_CHAR(TO_TIMESTAMP(1401432881230), \'DD/MM/YYYY HH24:MI:S

相关标签:
3条回答
  • 2021-02-07 10:51

    Okay, I understood. My INSERT should looks like:

    INSERT INTO events (timestamp) VALUES (to_timestamp(TO_CHAR(TO_TIMESTAMP(1401432881222 / 1000), 'YYYY-MM-DD HH24:MI:SS') || '.' || (1401432881222%1000), 'YYYY-MM-DD HH24:MI:SS.MS'))

    I'm converting bigint-timestamp with milliseconds to text with required format ('YYYY-MM-DD HH24:MI:SS.MS') and pass it to to_timestamp function.

    0 讨论(0)
  • 2021-02-07 10:54

    This is how I convert ms to timestamp and keep ms instead seconds.The accepted answer will drop 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 讨论(0)
  • 2021-02-07 11:03

    Unix timestamps measures time with seconds, and not milliseconds (almost everywhere, in PostgreSQL too).

    Therefore you need to call

    SELECT TO_TIMESTAMP(1401432881230 / 1000);
    

    If you want to preserve milliseconds, call with double precision:

    SELECT TO_TIMESTAMP(1401432881230::double precision / 1000);
    
    0 讨论(0)
提交回复
热议问题