我有一个包含时间戳编号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');
可以提供帮助!
答案 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;