默认时间戳格式和小数秒

时间:2014-03-11 17:40:30

标签: 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 HH24:MI:SS

2 个答案:

答案 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

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