개발을 하다보면 가끔 특정 날짜가 포함된 달의 마지막 날짜를 구해야 하는 경우가 종종 발생한다.
고전적인 방법은 지정날짜에 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;
'Blog > DB' 카테고리의 다른 글
ORACLE에서 LONG TYPE의 COLUMN에 LIKE 조건을 걸기 위해서.. LONG TO CHAR (0) | 2019.01.08 |
---|---|
달력을 DB에 저장해서 사용해야 하는 할 필요가 있을 때 달력 생성 - MSSQL (0) | 2019.01.03 |
SSMS에서 Table Design 시 Comment(설명) 항목 보기 (0) | 2018.12.03 |
Oracle Table / Column 정보 조회 Query (0) | 2018.11.28 |
MS-SQL에서 Table정보를 Query로 조회할 때 (0) | 2018.10.15 |