在一年的最后一个月中添加一个月逻辑

时间:2018-11-02 11:38:00

标签: sql oracle

运行报告时,将手动输入报告期限。我已经这样设置了参数:

AND (TRUNC(COJ.DATE_ENTERED) >= TO_DATE('&DATE_FROM', 'MM/YYYY') OR '&DATE_FROM' IS NULL)
AND (TRUNC(COJ.DATE_ENTERED) <= TO_DATE('&DATE_TO', 'MM/YYYY') OR '&DATE_TO' IS NULL)

例如,这些日期将输入为01/2015和12/2019。然后返回这些日期之间的数据。但是,我需要添加逻辑,如果它是一年中的最后一个月,那么它将添加一个月并转到下一年。示例-12/2019将更改为01/2020。有人可以帮忙吗?

DATE_ENTERED是与每个记录关联的数据。只是问任何问题,

2 个答案:

答案 0 :(得分:1)

例如,如果将日期分别输入为'01/2015''08/2017',并且如果必须在报告中包含2017年8月的所有数据,则{{1 }}子句应包含

where

这应该与“十二月”无关。另外,也不需要截断... and (COJ.DATE_ENTERED >= TO_DATE('&DATE_FROM', 'MM/YYYY') OR '&DATE_FROM' IS NULL) and (COJ.DATE_ENTERED < ADD_MONTHS(TO_DATE('&DATE_TO', 'MM/YYYY'), 1) OR '&DATE_TO' IS NULL)

答案 1 :(得分:-1)

我看不到你的问题。如果要在日期中添加一个月,则可以使用add_months(date, months)

https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions004.htm#SQLRF00603

begin
    dbms_output.put_line('Sysdate: ' || sysdate);
    dbms_output.put_line('Sysdate: ' || trunc(sysdate, 'mm'));
    dbms_output.put_line('Sysdate: ' || add_months(sysdate, 12));
    dbms_output.put_line('Sysdate: ' || trunc(add_months(sysdate, 12), 'mm')); 
end;