如何在同一 table 中插入重复记录,仅将日期更改为下一个日期
How to insert duplicate record in the same table with only change the date to the next date
我有一个要求,我需要复制当前记录并将数据列更新到下一个日期。
我有 table 如下数据:
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
我想在同一个 table 中插入第二天的相同数据。
插入后我希望 table 中的数据如下所示:
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
因为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,也不能分布在三列或更多列(例如年、月、日)。
强制性责备:您应该将日期存储为 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;
我有一个要求,我需要复制当前记录并将数据列更新到下一个日期。
我有 table 如下数据:
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
我想在同一个 table 中插入第二天的相同数据。 插入后我希望 table 中的数据如下所示:
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
因为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,也不能分布在三列或更多列(例如年、月、日)。
强制性责备:您应该将日期存储为 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;