如何在同一个表中插入重复记录,只将日期更改为下一个日期

时间:2015-03-17 11:01:34

标签: oracle plsql oracle11g

我有一个要求,我需要将当前记录复制到下一个日期的数据列更新。

我有如下表格数据:

cobdate     system  b_id    b_type  L_TYPE  lode    symbol
------------------------------------------------------------
20150205    M   N1  F   L   P   T
20150205    M   N1  F   L   P   E
20150205    M   N1  F   L   P   E

我想在同一张表中插入第二天的相同数据。 插入后我希望表格中的数据如下所示:

cobdate     system  b_id    b_type  L_TYPE  lode    symbol
-------------------------------------------------------------
20150206    M   N1  F   L   P   T
20150206    M   N1  F   L   P   E
20150206    M   N1  F   L   P   E

2 个答案:

答案 0 :(得分:1)

因为cobdate是一个数字,你需要将它转换为日期,添加一天(日期操作),然后将其转换回数字:

insert into table(
   cobdate, 
   system,b_id, b_type, L_TYPE, lode, symbol
   )
select 
   to_char(to_date(cobdate,'yyyymmdd')+1,'yyyymmdd'), 
   system,b_id, b_type, L_TYPE, lode, symbol
from table
where cobdate='20150205';

但是,您应该注意日期应存储为DATE,而不是数字,而不是varchars,也不会传播到三列或更多列(去年,月,日)。

答案 1 :(得分:0)

强制性谴责:您应将日期存储为DATE s,而不是NUMBER s。也就是说,将一天添加到存储为数字的日期应该不难:

INSERT INTO mytable ( cobdate, system, b_id, b_type, l_type, lode, symbol )
SELECT TO_NUMBER( TO_CHAR( TO_DATE(cobdate, 'YYYYMMDD') + 1, 'YYYYMMDD' ) )
     , system, b_id, b_type, l_type, lode, symbol
  FROM mytable
 WHERE cobdate = 20150205;