首页 > 解决方案 > 在我的表日期订单以错误的方式插入

问题描述

如果我插入开始日期 = 02-02-2018 和结束日期 = 05-02-2018。

目前我在表中的数据如下所示:(一次性插入)

1. 02-02-2018   05-02-2018
2. 03-02-2018   05-02-2018
3. 04-02-2018   05-02-2018

但我希望它看起来像这样:

1. 02-02-2018   03-02-2018
2. 03-02-2018   04-02-2018
3. 04-02-2018   05-02-2018

标签: c#oracle

解决方案


您已经从 start_date 循环到 end_date。对于 to_date 列,使用start_date + level

select 
      TO_CHAR((to_date(IP_START_DATE,'DD-MM-YYYY HH24:MI:SS')+ (level-1)),'DD-MM-YYYY'),
       TO_CHAR(to_date(IP_START_DATE,'DD-MM-YYYY HH24:MI:SS') + level,'DD-MM-YYYY') ,
       IP_MATERIAL_TYPE,
        IP_BRM_LIST,
        IP_PLAN_CONSUMPTION,
        IP_YARD_NO,
        IP_USER_ID,
        IP_USER_IP,
        SYSDATE
         FROM
        dual
        CONNECT BY
        level <= to_date(IP_END_DATE,'DD-MM-YYYY HH24:MI:SS')-to_date(IP_START_DATE,'DD-MM-YYYY HH24:MI:SS')+1;   

更新:假设列的格式material是固定的,并且将类似于300T,500A40F,以下查询将在天数之间平均分配它。

SELECT to_number(regexp_substr('300T', '^\d+'))/(TO_DATE('05-02-2018', 'DD-MM-YYYY') - TO_DATE('02-02-2018', 'DD-MM-YYYY')) || 
       regexp_substr('300T', '[A-Z]') as material
  FROM dual;

输出:

MATERIAL
--------
100T

使用您的列名进行计算将如下所示:

to_number(regexp_substr(material, '^\d+'))/(TO_DATE(IP_END_DATE, 'DD-MM-YYYY') - TO_DATE(IP_START_DATE, 'DD-MM-YYYY')) || regexp_substr(material, '[A-Z]')

推荐阅读