从PostgreSQL中的NOW()结果中删除TIMESTAMP精度



有没有办法从PostgreSQL中的NOW()函数的结果中删除精度?

"2012-08-21 10:23:34.867502"

我正在寻找格式为:

"2012-08-21 10:23:34"

我正试图用以下SQL更新"没有时区的时间戳"类型的列:

UPDATE table SET column = now();

谢谢!

简单的答案是将其强制转换为零精度。

select now()::timestamptz(0);
UPDATE tbl SET col = DATE_TRUNC('second', NOW());

请参阅DATE_TRUNC的文档。

如果在pgAdmin 3中将列的长度移动到0,或者如果使用timestamp(0)创建表,则可以更改表的结构,如下所示:

CREATE TABLE public.users
(
    id integer serial,
    username character varying(255) NOT NULL,
    email character varying(255) NOT NULL,
    password character varying(255) NOT NULL,
    created_at timestamp(0) without time zone NOT NULL,
    updated_at timestamp(0) without time zone NOT NULL,
    CONSTRAINT users_pkey PRIMARY KEY (id)
);

但如果你这样做,如果你试图插入一个毫秒的时间戳,就会发生错误。

使用date_trunc('second', column)而不是column::timestampt(0)column::timestamptz(0)

使用column::timestampt(0)可能会导致意外的列值四舍五入。

例如;2022-06-17 23:59:59.9999";转向";2022-06-18 00:00:00";在CCD_ 5返回"0"的同时;2022-06-17 23:59:59";。

根据您的需求,另一个选项是调整时间戳列本身的精度,将其精度设置为0。当PostgreSQL与不处理时间戳中的小数秒的遗留程序一起使用时,这可能很有用。

select now()::timestamp(0);

在先前的回答中选择CCD_ 6仍然保持时区。

最新更新