从时间改变列与时区到时间戳

时间:2013-08-15 14:30:13

标签: sql postgresql timestamp postgresql-9.2 alter

我无法在Postgres数据库中将名为end_date的列中的key_request列从时区更改为timestamp。我尝试使用以下代码:

alter table key_request alter column end_date type timestamp with time zone using end_date::timestamp with time zone

我一直收到以下错误:

ERROR:  cannot cast type time with time zone to timestamp with time zone

我知道如何调整此查询以便工作吗?

3 个答案:

答案 0 :(得分:15)

你可以这样做:

alter table key_request
alter column end_date type timestamp with time zone using date('20130101') + end_date;

sql fiddle demo

答案 1 :(得分:2)

我会在一系列步骤中做到这一点

  1. 更改表格,添加新列end_date1作为time with time zone
  2. 将日期从end_date(旧)复制到end_date1
  3. 更改表格,删除旧的end_date
  4. 更改表格,将end_date1扩展为end_date

答案 2 :(得分:0)

java.sql.Date更改为java.util.Date

ALTER TABLE key_request ALTER COLUMN end_date TYPE timestamp without time zone;

如果您有与该表相关的从属视图

  1. drop views
  2. 更改列类型
  3. 重新创建视图
  4. 在类型迁移中来自java / hibernate方法的解决方案。

    • java.sql.Date已翻译为date
    • java.util.Date已翻译为timestamp without time zone