2015-03-17 5 views
1

У меня есть требование, когда мне нужно дублировать текущую запись с обновлением столбца данных до следующей даты.Как вставить повторяющуюся запись в ту же таблицу, только изменив дату на следующую дату

У меня есть данные таблицы, как показано ниже:

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 
+0

ИМХО Вы можете сделать это с помощью процедуры магазина –

+0

cobdate этого числа? –

+0

есть. По дизайну его номер столбца. – sabya

ответ

1

Поскольку cobdate это число, вы должны преобразовать его в актуальном состоянии, добавить один день (операция дата), затем tranform его обратно на номер :

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'; 

Однако следует принять во внимание, что сроки должны быть сохранены как дата, а не цифры, а не VARCHARS, ни распространяющихся по трем или более столбцов (бывший год, месяц, день).

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; 
Смежные вопросы