12

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

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

我正在寻找格式为:

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

我正在尝试使用以下 SQL 更新“没有时区的时间戳”类型的列:

UPDATE table SET column = now();

谢谢!

4

5 回答 5

23

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

select now()::timestamptz(0);
于 2012-08-21T19:01:20.970 回答
14
UPDATE tbl SET col = DATE_TRUNC('second', NOW());

请参阅DATE_TRUNC的文档。

于 2012-08-21T18:07:37.523 回答
3

您可以更改表的结构,如果您在 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)
);

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

于 2016-09-23T15:45:49.243 回答
0

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

于 2015-10-08T01:17:04.210 回答
0
select now()::timestamp(0);

在上一个答案中,选择now()::timestamptz(0);仍然保留时区。

于 2021-03-01T18:12:26.630 回答