본문 바로가기
프로그래밍/DB

[MS-SQL] 특정 월의 마지막 날짜 구하는 두가지 방법

by [바가지] 2017. 9. 7.
반응형

MS-SQL 특정 월의 마지막 날짜 구하는 방법

 

 

 

특정한 월의 마지막 날짜를 구해야 할 때가 종종 발생합니다

MSSQL에서 특정월의 마지막 날짜를 구하기 위해서 몇가지 함수를 익혀야 합니다

그럼 하나하나 알아보록 하겠습니다

 

다양한 방법들이 있겠지만 그 중 두가지 방법을 알려 드립니다

 

첫번째 방법> 날짜를 월까지 자른 후, 일 값으로 01일을 더한 후 DATEADD 함수를 통해 -1일을 하면 끝

                   간단하죠 이렇게 하면 특정 월의 마지막 날짜를 쉽게 구할 수가 있습니다

 

쿼리결과

 

두번째 방법> DATEDIFF를 이용하는 방법입니다

                  DATEDIFF를 이용해 현재까지 또는 특정날까지의 월수를 계산합니다

                  그리고 역시 DATEADD를 통해 월의 마지막 날짜를 구하는 방법입니다

                  첫번째 방법에는 -1일 을 했다면 아래 예제는 -1초 를 했습니다

                  단순히 마지막 일을 구하고 싶다면 -1일 을 하는 것이 간단하겠습니다

 

쿼리결과

 

 

두번째 예제 상세설명

1. 현재 날짜를 가져오기 입니다

    SELECT GETDATE() col     -- 현재 날짜를 가져오죠

 

2. DATEDIFF 는 날짜의 차이(월, 일 등)를 비교하는 함수입니다

   SELECT DATEDIFF(M, 0, GETDATE()) col   -- 현재일자 2017년 8월17일 과 1411개월의 차이가 발생 합니다

   SELECT DATEDIFF(M, 0, '19000101') col  -- 기준년도가 1900년 1월 1일 이라는 것을 알 수 있습니다

 

3. DATAADD 로 다음 달 일자 구하기

SELECT DATEADD(MM, DATEDIFF(M, 0, GETDATE()) + 1, 0) col

-- 현재까지 월수에 1개월을 더한 개월수 와 "0" 즉  1900년 1월 1일 을 더한 값을 구합니다

    그러면 현재월에서 + 1개월 한 월의 1일이 되겠습니다

 

 

SELECT DATEADD(MM, DATEDIFF(M, 0, GETDATE()) + 2, 0) col

-- 2개월을 더하면 2017년 10월01일 00시 00분 00초 가 됩니다

 

SELECT DATEADD(S, -1, DATEADD(MM, DATEDIFF(M, 0, GETDATE()) + 1, 0)) col

-- 2017년 9월01일 00분00초 에서 -1초를 하면 2017년 8월 31일 23시 59분 59초가 되겠죠

 

SELECT CONVERT(VARCHAR(10), DATEADD(S, -1, DATEADD(MM, DATEDIFF(M, 0, GETDATE()) + 1, 0)), 112) col

-- 년월일 형태로 CONVERT

 

 

첫번째 예제 쿼리

SELECT DATEADD(DAY, -1, CONVERT(DATE, CONVERT(VARCHAR(6), GETDATE(), 112) + '01'))
SELECT DATEADD(DAY, -1, CONVERT(DATE, CONVERT(VARCHAR(6), '20150501', 112) + '01'))

 

 

여기까지 월의 마지막 일자를 구하는 방법 이였습니다

반응형