我正在尝试使用timezone字段存储时间戳我的值。它是从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
答案 0 :(得分:29)
Unix timestamps以秒为单位测量时间,不毫秒(几乎无处不在,在PostgreSQL中也是如此)。
因此您需要致电
SELECT TO_TIMESTAMP(1401432881230 / 1000);
如果您想保留毫秒数,请致电double precision
:
SELECT TO_TIMESTAMP(1401432881230::double precision / 1000);
答案 1 :(得分:0)
这就是我将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;
答案 2 :(得分:-2)
好的,我明白了。我的INSERT应该如下:
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'))
我将bigint-timestamp(毫秒)转换为具有所需格式的文本(' YYYY-MM-DD HH24:MI:SS.MS')并将其传递给to_timestamp函数。