[英]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 TZ
为MM/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.