PostgreSQL:将MongoDB日期格式转换为timestamptz

时间:2017-05-03 12:50:25

标签: sql postgresql timestamp-with-timezone

我已经提到了psql documentation,并提出了这个问题。

SELECT to_timestamp('Tue Aug 30 2016 04:07:13 GMT+0530 (IST)', 'Dy MON DD YYYY HH24:MI:SS');

这个日期时间字符串Tue Aug 30 2016 04:07:13 GMT+0530 (IST)是我从MongoDB printjson(createdAt)获得的。

以上postresql似乎无法正确处理所有偏移。

我试过这个

select to_timestamp('Tue Aug 30 2016 04:07:13 GMT+0530 (IST)', 'Dy MON DD YYYY HH24:MI:SS "GMT"OF "(IST)"');

但是我得到了这个错误``错误:" TZ" /" tz" /" OF" to_date`不支持格式模式。

如何从此字符串Tue Aug 30 2016 04:07:13 GMT+0530 (IST)转换为psql timestamptz格式?

1 个答案:

答案 0 :(得分:1)

它看起来很难看,并且对于每个无法识别的偏移都需要replace,但它有效。对于您的示例,请将'GMT+0530 (IST)'替换为'GMT+05:30',然后将其选中:

t=# select replace('Tue Aug 30 2016 04:07:13 GMT+0530 (IST)','GMT+0530 (IST)','GMT+05:30')::timestamptz;
        replace
------------------------
 2016-08-30 09:37:13+00
(1 row)
t=# select replace('Tue Aug 30 2016 14:07:13 GMT+0530 (IST)','GMT+0530 (IST)','GMT+05:30')::timestamptz;
        replace
------------------------
 2016-08-30 19:37:13+00
(1 row)

更新:根据您的时区结果可能会造成混淆:

t=# set timezone TO 'GMT-5:30';                                          SET
t=# select replace('Tue Aug 30 2016 14:07:13 GMT+0530 (IST)','GMT+0530 (IST)','GMT+05:30')::timestamptz;
          replace
---------------------------
 2016-08-31 01:07:13+05:30
(1 row)

检查是否正确,使用:

t=# select replace('Tue Aug 30 2016 14:07:13 GMT+0530 (IST)','GMT+0530 (IST)','GMT+05:30')::timestamptz at time zone 'UTC';
      timezone
---------------------
 2016-08-30 19:37:13
(1 row)