插入数据从现有表转换为日期

时间:2017-11-24 16:00:05

标签: oracle sap

我有一个包含时间戳编号TEST1 (TIMESTAMP)的表格,我想创建另一个表格TEST2,从第一个表格显示(TIMESTAMP, TIME)TIME字段显示timstamp转换为date)。我试过这个

insert into TEST2
values (TEST1.TIMESTAMP,to_date('1970-01-01 ','yyyy-mm-dd ') + 
(TEST1.TIMESTAMP)/60/60/24 ,'YYYY-MM-DD');

可以提供帮助!

1 个答案:

答案 0 :(得分:1)

假设TIMESTAMP列真的在几秒钟内,您的代码几乎是正确的。但是:to_date('1970-01-01', 'yyyy-mm-dd')是正确的,但是你必须添加一个数字 - 简单明了。那就是:+ TIMESTAMP/60/60/24。就像那样!

或者,为了避免舍入错误,您可以执行类似

的操作
to_date('1970-01-01', 'yyyy-mm-dd') + interval '1' second * test1.timestamp

请注意,固定日期也可以简单地写为

date '1970-01-01'

最后:如果要存储日期部分,请将该添加的结果包装在TRUNC(...)中 - 这会截断到当天的开头。或者,您可以使用算术表达式,不使用INTERVAL且不使用TRUNC,而是添加TRUNC(TEST1.TIMESTAMP)/60/60/24 - 这会将秒数截断为整数天。

请注意,Oracle中的日期没有"格式" (格式仅适用于日期的文本表示,而不适用于日期本身)。

编辑:您似乎还需要INSERT语句的帮助。当您使用另一个表中的数据插入表时,您不要INSERT ... VALUES,INSERT ... SELECT。类似的东西(使用你选择不当的列名 - 选择不当,因为它们是Oracle关键字):

insert into test2 (timestamp, time)
  select timestamp, date '1970-01-01' + trunc(timestamp/60/60/24)
  from   test1
;

请注意,TO_CHAR或TO_DATE都没有任何调用;并且没有像#yyyy-mm-dd'这样的格式模型。关于SQL标准日期文字date '1970-01-01'的好处之一是它只接受一种格式'yyyy-mm-dd'(即使破折号是强制性的; /也会被拒绝)。

如果您想查看表TEST2中现在的内容:

select timestamp, time from test2;

如果你不喜欢日期的显示方式,你可以控制:

select timestamp, to_char(time, 'yyyy-mm-dd') as time from test2;