Reputation: 45
I am looking for a way in oracle to add a quarter to a date.
For e.g 28-FEB-21 should become 28-MAY-20
Currently i am using ADD_MONTHS('28-FEB-21',3) to add a quarter but its changing the date to 31-MAY-21
Regards,
Upvotes: 0
Views: 1359
Reputation: 168740
You can use:
LEAST(
ADD_MONTHS( value, 3 ),
ADD_MONTHS( TRUNC( value, 'MM' ), 3 )
+ ( value - TRUNC( value, 'MM' ) ) DAY TO SECOND
)
So, if you have the test data:
CREATE TABLE table_name ( value ) AS
SELECT DATE '2019-11-30' FROM DUAL UNION ALL
SELECT DATE '2021-02-28' + INTERVAL '01:23:45' HOUR TO SECOND FROM DUAL;
Then the query:
SELECT value,
LEAST(
ADD_MONTHS( value, 3 ),
ADD_MONTHS( TRUNC( value, 'MM' ), 3 )
+ ( value - TRUNC( value, 'MM' ) ) DAY TO SECOND
) AS value_plus_quarter
FROM table_name;
Outputs:
VALUE | VALUE_PLUS_QUARTER :------------------ | :------------------ 2019-11-30 00:00:00 | 2020-02-29 00:00:00 2021-02-28 01:23:45 | 2021-05-28 01:23:45
db<>fiddle here
Upvotes: 1