如果我插入开始日期= 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
答案 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
的格式是固定的,并且将类似于300T
,500A
,40F
等,以下查询会将其平均分配给天数。
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]')