Oracle时间戳问题转换日期

时间:2019-08-23 11:43:16

标签: sql oracle plsql etl

我陷入了数据仓库任务,需要映射一个以 varchar2 数据类型为源的列,以及一个以 TIMESTAMP(6)WITH TIME ZONE 数据类型为目标的列。

源中包含的数据格式:2019-08-20

我尝试使用此映射:

select to_char(TO_TIMESTAMP_TZ('2019-08-20',  'yyyy-mm-dd"T"hh:mi:sstzhtzm'),'yyyy-mm-dd hh:mi:ss AM tzh:tzm')  from dual;

实际上适用于dual表。

但是当数据加载到目标中时,这是给定的输出:

12/1/9999 12:00:00.000000 AM +00:00

期望和期望的输出:

2019-08-20 12:00:00 AM +02:00

2 个答案:

答案 0 :(得分:0)

如果要插入TIMESTAMP列,为什么要执行TO_CHAR?

只需插入:

select TO_TIMESTAMP_TZ('2019-08-20',  'yyyy-mm-dd"T"hh:mi:sstzhtzm') from dual;

答案 1 :(得分:0)

由于您在varchar2中只能精确到日期,因此timestamp的所有其他部分(小时,分钟,秒和秒的一部分)将为0。 试试这个:

select TO_TIMESTAMP_TZ('2019-08-20',  'yyyy-mm-dd') from dual;

db<>fiddle demo

干杯!