Postgresql,将列数据TYPE从时间戳更改为DATE



我正在尝试将表中的列从时间戳(双精度(迁移到日期。

例如,现在seen_timestamp列包含如下值:

1643302746243

现在的值都是UTC。因此unix时间戳将是:

Thu, 10 Mar 54044 17:04:03 GMT

这是我犯的错误的一部分。时间戳应该是这样的:

1643302746.243

哪个日期:

01/27/2022, 04:59:06 PM

因此,我可以首先通过除以1000来更新所有值,然后迁移到UTC日期类型。。。。

我试过这个:

ALTER TABLE car
ALTER COLUMN seen_timestamp TYPE DATE USING seen_timestamp::DATE;

我得到以下错误:

cannot cast type double precision to date

有道理。我只是不知道如何将列更改/迁移到Date类型。

我怎样才能做到这一点?

使用适当的USING子句:

ALTER TABLE car
ALTER COLUMN seen_timestamp TYPE timestamp
USING to_timestamp(seen_timestamp / 1000.0::numeric);

所以我开始工作了。The Impaler的评论和Laurenz的回答都有助于朝着正确的方向发展。这就是对我有效的:

-- add new tmp column to store timestamps
ALTER TABLE car ADD COLUMN tmp_seen_timestamp timestamptz;
-- update new column using seen_timestamp values/1000
UPDATE car SET tmp_seen_timestamp=to_timestamp(seen_timestamp / 1000.0::numeric) where seen_timestamp is not null;
-- remove original column
ALTER TABLE car drop column seen_timestamp;
-- raname column...
ALTER TABLE car rename column tmp_seen_timestamp to seen_timestamp;

这也起作用,遵循Laurenz发布的内容:

ALTER TABLE car
ALTER COLUMN seen_timestamp TYPE timestamptz
USING to_timestamp(seen_timestamp / 1000.0::numeric);

这可以满足它的需要,但是,我很困惑为什么使用"日期"作为类型不能提供完全的精度。

如何在postgresql中更新时间戳数据类型

ALTER TABLE[表名称]ALTER COLUMN_NAME]不带时区的TYPE TIMESTAMP

最新更新