0

我的问题是我的 oracle 数据库有 timestamp(6) 列(没有任何时间戳信息),但时间戳存储在 CET/CEST(欧洲/柏林)中。

我们需要将时间戳更正为 UTC(因为当时间从 CEST 切换到 CET - 例如 28.10.2018 时,我们已经遇到了问题)

我已经找到了如何通过更新脚本完成以下操作: How to update a TIMESTAMP column to TIMESTAMP WITH TIME ZONE in Oracle

由于我们还计划从 11 迁移到 12 - 我的问题是是否也可以在转储 exp / imp (expdp / impdp) 期间完成?

4

1 回答 1

2

正确的转换是这个:

 FROM_TZ(YOUR_COLUMN, 'Europe/Berlin')  AT TIME ZONE 'UTC'

这将返回一个TIMESTAMP WITH TIME ZONE值。如果你喜欢得到一个TIMESTAMP那么你可以使用

 SYS_EXTRACT_UTC(YOUR_COLUMN, 'Europe/Berlin')

但是,我不知道如何将其包含在导入/导出中。我假设您必须使用REMAP_DATA

CREATE OR REPLACE PACKAGE Convert_Date AS       
    FUNCTION TO_UTC(ts IN TIMESTAMP) RETURN TIMESTAMP;
END Convert_Date;
/


CREATE OR REPLACE PACKAGE BODY Convert_Date AS

FUNCTION TO_UTC(ts IN TIMESTAMP) RETURN TIMESTAMP
BEGIN
    RETURN SYS_EXTRACT_UTC(ts, 'Europe/Berlin');    
END;

END Convert_Date;
/

然后使用这个导入参数:

REMAP_DATA=[schema.]tablename.column_name:Convert_Date.TO_UTC
于 2019-02-28T14:00:56.263 回答