我对我的PostgreSQL数据库为timestamp(0) without time zone
字段返回不同的结果感到困惑。假设我有一张桌子t
create table t (
x timestamp(0) without time zone
);
insert into t select now();
现在,当我从不同的客户端运行select * from t
时,我得到不同的输出。
PSQL:
2014-04-06 10:22:57
JDBC:
2014-04-06 10:22:57:000
(driver postgresql-9.3-1101.jdbc4.jar 通过 SQLExplorer eclipse 插件运行)节点-PG:
Sun Apr 06 2014 10:22:57 GMT+0200 (CEST)
在这三者中,只有 PSQL 是我期望(和需要)的输出。为什么会发生这种情况,如何在不必显式转换查询的情况下修复它?
如果您希望数据库返回时间戳的特定字符串格式,通常应在查询中请求它。
to_char(the_timestamp_col, 'YYYY-MM-DD HH:MI:SS')
请参阅文档中的to_char
。
或者,您可以使用客户端应用程序语言的功能根据需要设置时间戳的格式。对于功能更丰富的语言,这通常是更好的选择。
虽然PostgreSQL通常通过查询协议返回日期的特定文本格式,但客户端可以自由选择使用二进制协议,在这种情况下,它们将在纪元秒内获得宽整数值。与其依赖 PostgreSQL 协议中的值按照您想要的方式格式化,不如准确询问您需要的内容。
将数据库表示形式转换为 时间戳与时区。 时期。 它不会改变存储,而是增加了精度。 如果没有时区,TIMESTAMP 的精度为 +/- 24 小时。