Postgresql 默认时间戳格式和小数秒

Postgresql 默认时间戳格式和小数秒,postgresql,datetime,format,timestamp,default,Postgresql,Datetime,Format,Timestamp,Default,我正在尝试将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 H

我正在尝试将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

时间戳类型中没有存储格式。您可以将其默认值设置为创建时截断为秒的时间戳

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
类型可以选择使用精度修饰符
p
时间戳(p)

整轮整秒,请将默认值设置为:

now()::timestamp(0)` or `now()::timestamptz(0)
标准SQL函数(返回
timestamp
)或(返回
timestamp
)允许相同的精度修饰符:

CURRENT_TIMESTAMP(0)
LOCALTIMESTAMP(0)
这比调用
date\u trunc()
,要便宜一点,也要短一点,因为
会截断分数秒(可能是您真正想要的!)

将时间戳存储为
timestamp
(或
timestamp
),不使用字符类型

最后,要确保

新添加的条目的格式也为:YYYY-MM-DD HH24:MI:SS

您可以将列定义为类型
timestamptz(0)
。这不仅包括默认值,还包括输入到该列的所有值

有关的说明以及如何操作,请参阅

以下是有关时间戳和时区处理的深入信息的相关答案:


我看到您想要截断毫秒部分?您可以使用触发器来完成。您的表定义在哪里?我们需要看一下才能确定<代码>\d我的表格
在psql中。