繁体   English   中英

PostgreSQL将带时区的日期转换为时间戳

[英]PostgreSQL convert date with timezone to a timestamp

我的日期已以DD/MM/YYYY HH24:MI TZ (带时区的日期时间)格式存储在我的psql数据库中。 我需要将此日期转换为时间戳。

我尝试了to_timestamp(),但它不能与时区一起使用。

ERROR:  "TZ"/"tz"/"OF" format patterns are not supported in to_date

我尝试了:: timestamptz,但它认为日期的格式为MM/DD/YYYY HH24:MI TZ

ERROR:  date/time field value out of range

有什么方法可以将格式从DD/MM/YYYY HH24:MI TZMM/DD/YYYY HH24:MI TZ或将DD/MM/YYYY HH24:MI TZ为时间戳?

例如“ 28/04/2017 13:00 +2:30”

尝试直接投放吗?

so=# select to_timestamp('04/28/2017 13:00 +2:30','D/MM/YYYY HH24:MI TZ');
ERROR:  "TZ"/"tz"/"OF" format patterns are not supported in to_date
Time: 20.850 ms
so=# select '04/28/2017 13:00 +2:30'::timestamptz;
      timestamptz
------------------------
 2017-04-28 10:30:00+00
(1 row)

Time: 0.554 ms

https://www.postgresql.org/docs/current/static/functions-formatting.html

存在to_timestamp和to_date来处理无法通过简单转换进行转换的输入格式。 对于大多数标准日期/时间格式,只需将源字符串强制转换为所需的数据类型即可,并且非常容易。

更新

关于您的评论,您只需要调整datestyle即可更改解析:

so=# set datestyle to DMY;
SET
Time: 9.997 ms
so=# select '04/28/2017 13:00 +2:30'::timestamptz;
ERROR:  date/time field value out of range: "04/28/2017 13:00 +2:30"
LINE 1: select '04/28/2017 13:00 +2:30'::timestamptz;
               ^
HINT:  Perhaps you need a different "datestyle" setting.
Time: 10.217 ms
so=# set datestyle to MDY;
SET
Time: 8.799 ms
so=# select '04/28/2017 13:00 +2:30'::timestamptz;
      timestamptz
------------------------
 2017-04-28 10:30:00+00
(1 row)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM