我正在尝试将Postgres数据库中的时间戳格式化为某种格式:
YYYY-MM-DD HH24:MI:SS
通过做:
update myTable set tds = to_char(tds, 'YYYY-MM-DD HH24:MI:SS')::timestamp;
我设法将以前存储的所有tds
设置为此格式。但是,任何新添加的条目都会返回到:YYYY-MM-DD HH24:MI:SS.MS
,因为默认设置为now()
。
如何更改此设置,以便新添加的条目也具有以下格式:YYYY-MM-DD HH24:MI:SS
?
答案 0 :(得分:4)
时间戳类型中没有存储格式。您可以将其默认值设置为在创建时截断为秒的时间戳
create table t (
tds timestamp default date_trunc('second', now())
)
或改变表格
alter table t
alter column tds
set default date_trunc('second', now());
insert into t values (default);
INSERT 0 1
select * from t;
tds
---------------------
2014-03-11 19:24:11
如果您不想显示毫秒部分格式化输出
select to_char(now(), 'YYYY-MM-DD HH24:MI:SS');
to_char
---------------------
2014-03-11 19:39:40
答案 1 :(得分:2)
类型timestamp
or timestamptz
可选择使用精确修改器 p
:timestamp(p)
。
要将 round 设置为完整秒数,请将默认值设置为:
now()::timestamp(0)` or `now()::timestamptz(0)
标准SQL函数CURRENT_TIMESTAMP
(返回timestamptz
)或LOCALTIMESTAMP
(返回timestamp
)允许使用相同的精度修饰符:
CURRENT_TIMESTAMP(0)
LOCALTIMESTAMP(0)
比调用date_trunc()
更便宜,更短 - 其中 截断 小数秒(可能是你真正想要的!)
使用字符类型将时间戳存储为timestamptz
(或timestamp
),不。
最后,要确定 ......
新添加的条目也具有以下格式:YYYY-MM-DD HH24:MI:SS
您可以将列定义为timestamptz(0)
类型。这不仅包括默认值,还包括输入到该列的所有值。
有关@Clodoaldo's answer以及如何to_char()
的说明,请参阅ALTER TABLE
。
有关时间戳和时区处理的深入信息的相关答案: