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'))
여기까지 월의 마지막 일자를 구하는 방법 이였습니다
'프로그래밍 > DB' 카테고리의 다른 글
[MS-SQL] 문자열 자르기-SUBSTRING, CHARINDEX, LEN (0) | 2017.09.11 |
---|---|
[MS-SQL] 테이블 조인하여 업데이트하는 방법 (0) | 2017.09.08 |
[MS-SQL] 정규식을 이용한 특수문자 포함 된 데이터 조회 방법 (0) | 2017.09.07 |
[MS-SQL] 컬럼명이 포함 된 테이블 찾는 방법 (0) | 2017.09.01 |
[MS-SQL] 프로시저 커서(CURSOR) 사용 법 (0) | 2017.08.31 |