无法在PostgreSQL中将列类型从日期更改为带时区的时间戳

kninwzqo  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(161)

我想将PostgreSQL中的列类型从日期更改为带时区的时间戳。但是,尽管表中只有3条记录,并且没有任何错误或成功的结果,但后续SQL的执行仍在继续,直到我停止它。

alter table some_table
    alter column column_date type timestamp
        using to_timestamp(extract(epoch from column_date))

同时select to_timestamp(extract(epoch from column_date)) from some_table正在正确执行,没有任何错误。
我尝试了 using 表达式另一种变体

  • using column_date::timestamptz
  • using timestamp with time zone 'epoch' + (column_date + interval '0 second') * interval '1 second'
  • using column_date AT TIME ZONE 'UTC',没有任何影响。

如果所有记录中的列都为空值,则立即使用simple alter sql更改类型

alter table some_table
    alter column column_date type timestamp
        using column_date::timestamp with time zone
  • 我使用PostgreSQL 12*

是否有适当的方法将日期更改为带时区的时间戳?
我知道我可以通过创建一个具有适当类型的新列,然后交换它们来完成此任务:))

erhoui1w

erhoui1w1#

下面是一个简单的示例,说明如何使用UTC作为时区
第一个
| 米达特|
| - -|
| 2022年1月1日|
| 2021年1月1日|
| 2020年1月1日|
第一个
| 米达特|
| - -|
| 2022年01月01日00时00分00秒00分|
| 2021年01月01日00时00分00秒00秒+00秒|
| 2020年01月01日00:00:00+00时|

SELECT 3

fiddle

相关问题