by 터류 [Oracle 기초] ORACLE MSSQL ADD_MONTHS DATEADD [2022.12.08 16:44:27]
오라클에서 MSSQL DATEADD 월 더하기를 처럼 처리 할 수 있는 방법이있을까요?
MSSQL에서 월 계산해서 나오는 날짜로 오라클쪽에 일치 시켜야하는데 쉽게 해결이 안되네요
예) ORACLE - ADD_MONTHS
22/2/28 + 9개월 = 23/11/30
22/4/30 + 9개월 = 23/1/31
22/5/29 + 9개월 = 23/2/28
오라클에서 ADD_MONTHS 이전 날짜에서 -1일 하고 9개월 더하고 +1일 더하는 방식으로 했더니 5/29 은 3/1로 넘어가네요
DATEADD 에서는 2/28 로 처리되고요
ADD_MONTHS(22/5/29 -1), 9) +1 = 23/3/1
예) MSSQL - DATEADD
22/2/28 + 9개월 = 23/11/28
22/4/30 + 9개월 = 23/1/30
22/5/29 + 9개월 = 23/2/28 (생각과 다르게 3/1로 안넘어 감)
함수를 만들어서 5/28 5/29 5/30 5/31 일때 9개월을 더한 2월인 달의 마지막 날짜(28일, 29일)를 붙이는 방법으로 날짜를 계산해보고 있는데
생각지 못한 문제가 있을까봐 이런 방법 이외 다른 방법이 있을지 조언 부탁드립니다.
WITH t AS ( SELECT DATE '2022-02-28' dt FROM dual UNION ALL SELECT DATE '2022-03-01' FROM dual UNION ALL SELECT DATE '2022-03-31' FROM dual UNION ALL SELECT DATE '2022-04-30' FROM dual UNION ALL SELECT DATE '2022-05-29' FROM dual ) SELECT dt , LEAST(dt1 + dd - 1, LAST_DAY(dt1)) dt1 FROM (SELECT dt , TO_CHAR(dt, 'dd') dd , ADD_MONTHS(TRUNC(dt, 'mm'), 9) dt1 FROM t ) ;