Oracle将行复制到具有不同日期的同一个表中

Posted

技术标签:

【中文标题】Oracle将行复制到具有不同日期的同一个表中【英文标题】:Oracle copying rows into same table with different dates 【发布时间】:2021-08-13 13:45:06 【问题描述】:

我有一个时间表,日期可以跨越午夜。在示例中,您可以看到 08/23 和 08/24 的日期。

如何将这些行复制到同一个表中但日期不同。 例如 start_date 08/23 的行我想是 08/28。 start_date 08/24 的行应该是第二天 08/29。

注意 start_date=08/23 和 end_date=08/24 的情况

提前感谢所有回答。

Desired output

SCHEDULE_ID    LOCATION_ID    START_DATE    END_DATE
22    1    08232021 23:50:00    08232021 23:54:00
22    1    08232021 23:56:00    08242021 00:02:00
22    2    08242021 00:05:00    08242021 00:09:00

22    1    08282021 23:50:00    08282021 23:54:00
22    1    08282021 23:56:00    08292021 00:02:00
22    2    08292021 00:05:00    08292021 00:09:00


ALTER SESSION SET NLS_DATE_FORMAT = 'MMDDYYYY HH24:MI:SS';

   create table schedule(
       schedule_id NUMBER(4),
       location_id number(4),
       start_date DATE,
       end_date DATE,
          check (start_date=trunc(start_date,'MI')),
        check (end_date=trunc(end_date,'MI'))
      );

   
   insert into schedule(
     schedule_id,
     location_id,
     start_date,
     end_date 
     )
        VALUES     (22,1,TO_DATE('2021/08/23 23:50:00', 'yyyy/mm/dd hh24:mi:ss'),TO_DATE('2021/08/23 23:54:00', 'yyyy/mm/dd hh24:mi:ss'));


   insert into schedule(
     schedule_id,
     location_id,
     start_date,
     end_date 
     )
        VALUES     (22,1,TO_DATE('2021/08/23 23:56:00', 'yyyy/mm/dd hh24:mi:ss'),TO_DATE('2021/08/24 00:02:00', 'yyyy/mm/dd hh24:mi:ss'));


   insert into schedule(
        schedule_id,
         location_id,
         start_date,
         end_date 
       )
       VALUES      (22,2,TO_DATE('2021/08/24 00:05:00', 'yyyy/mm/dd hh24:mi:ss'),
TO_DATE('2021/08/24 00:09:00', 'yyyy/mm/dd hh24:mi:ss'));

【问题讨论】:

【参考方案1】:

您这样做是为了生成更多数据,也许是为了测试?

应该是这样的

insert into schedule
  select schedule_id, location_id, start_date + 5, end_date + 5
  from   schedule
;

某些日期间隔跨越午夜的事实是无关紧要的。

【讨论】:

谢谢。抱歉,如果我的帖子具有误导性,但一天可能有多个时间表。我要做的是收集某个日期的所有时间表行,然后只复制它们。我不确定如何处理跨越午夜的时间表,因为我不想复制部分时间表。我需要一些更聪明的东西。也许可以找到 DATE、date+1 的所有行并复制这些行。我在考虑合并,所以我不会得到重复的行。 @Beefstu - 抱歉,我不明白。我提供的解决方案是“复制”all 表中的所有计划和所有日期的行(结果是该表的行数将是原来的两倍)。 “一个日期的所有计划行并且只复制它们”是什么意思? “只”指的是什么?在您的示例中,您展示了复制所有行。 我需要这样的东西,但如果轮班过了午夜,它就不起作用了。也许我会要求一个班次不能跨越午夜 INSERT 插入日程表( schedule_id, location_id, start_date, end_date ), rws 为( select s.*, max (start_date ) over () mx_dt from schedule s ) SELECT * from ( select schedule_id, location_id, start_date + 1, end_date +1 from rws where start_date > trunc ( mx_dt ) );

以上是关于Oracle将行复制到具有不同日期的同一个表中的主要内容,如果未能解决你的问题,请参考以下文章

如何将行从一个 MySQL 数据库复制到另一个

DB2 INSERT INTO SELECT状态将行复制到同一张表中,不允许多行。

将行从一个表复制到另一个表时如何解决数据截断错误,两个表具有相同的模式?

如何创建 oracle 程序以将数据导出到历史表中?

可以将行中的数据从一张纸复制到另一张纸吗?

将一些数据从 sqlite 表复制到具有不同两列的同一个表中