PostgreSQL BigInt转换为DateTime并添加几个小时以获取本地时间

问题描述

我正在尝试将bigint值转换为Postgresql中的日期

我正在使用以下代码

SELECT TO_CHAR(TO_TIMESTAMP(1564983632051/ 1000),'YYYY-MM-DD HH24:MI:SS')

然后返回2019-08-05 07:40:32,这是正确的。

但是我想增加几个小时来获取本地时间。尝试使用以下查询,但抛出错误

SELECT TO_CHAR(TO_CHAR(TO_TIMESTAMP(1564983632051/ 1000),'YYYY-MM-DD HH24:MI:SS') + INTERVAL '4 hour')

我不想使用单独的查询,如果可以的话 选择(to_timestamp('2019-08-05 07:40:32','YYYY-MM-DD HH24:MI:SS.US')+间隔'4 hour'):: timestamp; 这将返回所需的输出

我需要在单个查询中同时进行转化和加班。

解决方法

您应该添加到TIMESTAMP部分,而不是添加到CHAR的部分:

SELECT TO_CHAR(
               TO_TIMESTAMP(1564983632051/ 1000)+ INTERVAL '4 hour','YYYY-MM-DD HH24:MI:SS'
               )
,

问题在这里:

select pg_typeof(TO_CHAR(TO_TIMESTAMP(1564983632051/ 1000),'YYYY-MM-DD HH24:MI:SS'));

pg_typeof 
-----------
 text

在文本值中添加interval无效。

类似这样:

select TO_CHAR(TO_TIMESTAMP(1564983632051/1000) + interval '4 hour','YYYY-MM-DD HH24:MI:SS') ;
 to_char       
---------------------
 2019-08-05 02:40:32

最好保持操作类型直到最后。然后应用格式。