我的问题是,我的oracle数据库有timestamp(6)列(没有任何时间戳信息),但是时间戳存储在CET/CEST (欧洲/柏林)中。
我们需要将时间戳更正为UTC (因为当时间从CEST切换到CET时,我们已经有了问题-例如,2018年10月28日)
我已经找到了以下通过更新脚本实现的方法:How to update a TIMESTAMP column to TIMESTAMP WITH TIME ZONE in Oracle
因为我们还计划从11迁移到12 -我的问题是,在转储exp / imp (expdp / impdp)期间是否也可以这样做?
发布于 2019-02-28 14:00:56
正确的转换应该是这样的:
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
https://stackoverflow.com/questions/54923719
复制相似问题