插入时从Postgres中的timestamp列中删除毫秒

时间:2015-01-07 06:07:14

标签: postgresql-9.1

任何正文都可以告诉如何在将当前时间插入Postgres数据库表中的timestamp列时删除或跳过毫秒部分。实际上,包含数据类型timestamp without timezone和默认值的列设置为now(),即它将采用当前日期和时间。

它插入了正确的日期和时间,但它以毫秒为单位,例如输入的格式为" 2015-01-07 10:27:44.234534"有毫秒的部分,即234534,我不想插入。我只想要插入的数据为" 2015-01-07 10:27:44"。任何机构都可以告诉我,而不更改该列的数据类型如何插入跳过毫秒部分的当前日期和时间。

2 个答案:

答案 0 :(得分:5)

更改默认值以消除毫秒:

create table foo 
(
  id integer not null primary key,
  created_at timestamp default date_trunc('second', current_timestamp)
);

或者更改现有表格的默认值:

alter table foo 
   alter column created_at set default date_trunc('second', current_timestamp);

要更改现有值,您可以使用:

update foo 
  set created_at = date_trunc('second', created_at)
where created_at is not null;

除了使用date_trunc之外,您还可以为更新语句转换值created_at::timestamp(0),或者为默认值转换current_timestamp::timestamp(0)

答案 1 :(得分:1)

另外,如果您可以修改该列的数据类型,则可以默认插入CURRENT_TIME

CREATE TABLE my_table (
                col1 TEXT,
                col2 INTEGER,
                ts TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP
                );

括号之间的0表示您不想要任何毫秒。有关详细信息,请参阅documentation