如何在postgresql中将bigint(以毫秒为单位的时间戳)值写入时间戳

如何在postgresql中将bigint(以毫秒为单位的时间戳)值写入时间戳,postgresql,timestamp,unix-timestamp,milliseconds,bigint,Postgresql,Timestamp,Unix Timestamp,Milliseconds,Bigint,我试图将我的值与时区字段一起存储在时间戳中。从1970年开始以毫秒为单位 选择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以秒为单位测量时间,而不是以毫秒为单位测量时间(几乎所有地方,在PostgreSQL中也是如此) 所以你需要打电话 SELECT TO_TIMESTAMP(14014328

我试图将我的值与时区字段一起存储在时间戳中。从1970年开始以毫秒为单位

选择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

以秒为单位测量时间,而不是以毫秒为单位测量时间(几乎所有地方,在PostgreSQL中也是如此)

所以你需要打电话

SELECT TO_TIMESTAMP(1401432881230 / 1000);
如果要保留毫秒,请使用双精度调用:

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

好的,我明白了。我的插入应该如下所示:

插入到事件(时间戳)值中(to_timestamp(to_CHAR(to_timestamp(1401432881222/1000),'YYYY-MM-DD HH24:MI:SS')。| |(1401432881222%1000),'YYYY-MM-DD HH24:MI:SS.MS')。


我正在将带毫秒的bigint时间戳转换为所需格式的文本(“YYYY-MM-DD HH24:MI:SS.MS”),并将其传递给_timestamp函数。

这就是我如何将毫秒转换为时间戳并保留毫秒而不是秒。接受的答案将删除毫秒

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;

选择TO_CHAR(TO_TIMESTAMP(1401432881222/1000),'DD/MM/yyyyy HH24:MI:SS')| |'。| |(1401432881222%1000)
是好的样式查询吗?将
30/05/2014 06:54:41.222
返回到时间戳
已考虑毫秒,这就是它接受浮点unix时间戳的原因。如果您想存储一个真实的时间戳,只需存储它返回的内容即可。如果您想格式化它,请使用
MS
来显示毫秒。但是在我的示例中(选择to_CHAR(to_TIMESTAMP(1401432881230),'DD/MM/yyyyy HH24:MI:SS.MS'))我正按照您所说的那样做。如果您愿意,您还可以将
写入_TIMESTAMP(1401432881230/1000.0)
而不是显式转换。