gpt4 book ai didi

sql - 将 Oracle DATE 列迁移到带时区的 TIMESTAMP

转载 作者:行者123 更新时间:2023-12-04 00:33:45 31 4
gpt4 key购买 nike

背景:
我有一个我正在开发的遗留应用程序,它使用 DATE 类型来存储数据库中的大部分时间。我想尝试更新其中一些表,以便它们可以利用时区,因为这会导致与数据库所在区域不同的用户出现问题(请参见下面的 A)。这是针对 Oracle 10g 的。

问题:

1)我可以“就地”迁移这个吗?那是我可以像这样转换吗

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

...还是我必须使用不同的列名?

请记住,数据需要保留。如果这可以在迁移脚本中半轻松地完成,它将适用于我的目的。

2) 这种类型的转换是否向后兼容?我们可能有一些我们可能不知道的脚本或报告会出现在这个表中。我们可能会处理它,但我想知道我走进的是哪种马蜂窝。

3) 我应该注意哪些陷阱?

谢谢,

编辑:
(部分回应加里)

我对多步骤过程没问题。

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

Gary 还希望澄清特定的时区问题。我从下面复制了我的答案,以使其更具可读性。

基本上,数据将从几个不同的区域访问。我们需要能够根据需要转换到/从本地时区。我们还有使用 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);

转换是向后兼容的 - 您可以根据需要来回切换。

关于sql - 将 Oracle DATE 列迁移到带时区的 TIMESTAMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664627/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com