oracle 插入数据转换为现有表中的日期

z4bn682m  于 2023-08-04  发布在  Oracle
关注(0)|答案(1)|浏览(75)

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

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

字符串
可以有帮助!

6ie5vjzr

6ie5vjzr1#

假设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'


最后:如果要存储日期部分,请将相加的结果 Package 在TRUNC(...)中,它将截断到一天的开始。或者,您可以使用算术表达式,不使用INTERVALTRUNC,而是添加TRUNC(TEST1.TIMESTAMP)/60/60/24-这将把秒截断为整数天。
请注意,Oracle中的日期没有“格式”(格式仅适用于日期的文本表示,而不适用于日期本身)。

EDIT:看来你还需要INSERT语句的帮助。当您使用另一个表中的数据插入到一个表中时,您不会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'(甚至连连破折号都是必须的; /将被拒绝)。
如果你想看看表TEST 2中的内容:

select timestamp, time from test2;


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

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

相关问题