sql – 将Oracle DATE列迁移到具有时区的TIMESTAMP

前端之家收集整理的这篇文章主要介绍了sql – 将Oracle DATE列迁移到具有时区的TIMESTAMP前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Bakground:
我有一个我正在使用的遗留应用程序,它使用DATE类型在数据库中大部分时间存储.我想尝试更新这些表中的一些表,以便它们可以利用时区,因为这会在数据库的不同区域引起用户问题(见下文A).这是针对Oracle 10g的.

Quetions:

1)我可以迁移这个“到位”.那就是这样我可以转换

DATE_COL = type:DATE   =>    DATE_COL = type:TIMESTAMP

…或者我将不得不使用不同的列名?

请记住,数据需要保留.如果这可以在迁移脚本中轻松地完成,它将为我的目的而工作.

2)这种类型的转换是否向后兼容?我们可能会有一些脚本或报告,这将打击我们可能不知道的这个表.我们可以处理它,但我想知道我正在走哪一种大黄蜂巢.

3)我应该注意什么陷阱?

谢谢,

编辑:
(部分是为了回应加里)

我很好,有一个多步骤的过程.

1)通过某种转换将数据移动到新的Timestamp列(caled TEMP)
2)删除旧列(我们称之为MY_DATE)
3)创建具有旧日期列名称(MY_DATE)的新时间戳列
4)将数据移动到MY_DATE列
5)删除TEMP列

加里还希望澄清具体的时区问题.我从下面复制了我的答案,使其更易于阅读.

基本上将从几个不同的领域访问数据.我们需要能够根据需要转换到/从本地时区.我们也有触发器使用sysdate进一步复杂的事情.时间戳与时区缓解了这么多痛苦.

哦,谢谢你的答复.

解决方法

你可以运行:
ALTER TABLE your_table MODIFY your_date_column TIMESTAMP WITH TIME ZONE;

但是我建议在表中添加TIMESTAMP列,使用UPDATE语句进行填充,如果您选择,则删除原始日期列:

ALTER TABLE your_table ADD date_as_timestamp TIMESTAMP WITH TIME ZONE;

UPDATE your_table
   SET date_as_timestamp = CAST(date_column AS TIMESTAMP WITH TIME ZONE);

转换向后兼容 – 您可以切换回如你所愿.

猜你在找的MsSQL相关文章