MSSQL , ORACLE 월(month)의 마지막날 구하기 함수

개발을 하다보면 가끔 특정 날짜가 포함된 달의 마지막 날짜를 구해야 하는 경우가 종종 발생한다.

고전적인 방법은 지정날짜에 1개월을 더하고 일(day)를 01로 바꿔준 날짜에서 하루를 빼준다.

뭐 어느 VERSION 부터 추가된건지는 몰라도... 최근 사용되는 DB는 거의 될듯~

난 아직도 20년전에 묶여서 하는 듯한 이느낌은 뭐징...ㅋㅋ



MS-SQL

-- 1개월을 더한다.

SELECT CONVERT( VARCHAR(10), DATEADD( M, 1, GETDATE() ), 112);


--년월(YYYYMM)만 추출

SELECT LEFT( CONVERT( VARCHAR(10), DATEADD( M, 1, GETDATE() ), 112) , 6 );


--년월(YYYYMM)에 01(DAY)를 붙임

SELECT LEFT( CONVERT( VARCHAR(10), DATEADD( M, 1, GETDATE() ), 112) , 6 ) + '01';


-- 날짜 FORMAT 으로 변경

SELECT CONVERT(DATE, LEFT( CONVERT( VARCHAR(10), DATEADD( M, 1, GETDATE() ), 112) , 6 ) + '01', 112);


-- 하루를 뺀다.

SELECT DATEADD( D, -1, CONVERT(DATE, LEFT( CONVERT( VARCHAR(10), DATEADD( M, 1, GETDATE() ), 112) , 6 ) + '01', 112) );


-- 한방에 함수로 해결

SELECT EOMONTH( GETDATE() );



ORACLE

-- 1개월을 더한다.

SELECT  TO_CHAR( ADD_MONTHS(SYSDATE, 1), 'YYYYmmDD') FROM DUAL;


--년월(YYYYMM)만 추출

SELECT  SUBSTR(TO_CHAR( ADD_MONTHS(SYSDATE, 1), 'YYYYmmDD') ,1,6) FROM DUAL;


--년월(YYYYMM)에 01(DAY)를 붙임

SELECT  SUBSTR(TO_CHAR( ADD_MONTHS(SYSDATE, 1), 'YYYYmmDD') ,1,6) || '01' FROM DUAL;


-- 날짜 FORMAT 으로 변경

SELECT  TO_DATE( SUBSTR(TO_CHAR( ADD_MONTHS(SYSDATE, 1), 'YYYYmmDD') ,1,6) || '01' , 'YYYYmmDD') FROM DUAL; 


-- 하루를 뺀다.

SELECT  TO_DATE( SUBSTR(TO_CHAR( ADD_MONTHS(SYSDATE, 1), 'YYYYmmDD') ,1,6) || '01' , 'YYYYmmDD') -1 FROM DUAL;


-- 한방에 함수로 해결

SELECT LAST_DAY(SYSDATE) FROM DUAL;