在我的表格中,日期顺序以错误的方式插入

时间:2018-07-12 11:32:19

标签: c# oracle

如果我插入开始日期= 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

1 个答案:

答案 0 :(得分:0)

您已经将起始日期从开始日期循环到结束日期。对于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的格式是固定的,并且将类似于300T500A40F等,以下查询会将其平均分配给天数。

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]')