[MSSQL] 이전월 1일부터 말일까지 검색 조건 생성(통계 쿼리 작성시)
현재일자를 기준으로 이전월 통계 자료를 구해야하는 경우, 현재일자를 기준으로 전월 시작일과 종료일을 구하는 방법에 대해 알아본다. DATEADD 함수를 사용하면 쉽게 해결할 수 있으며, DATEPART 구분자를 사용하여 년,월,일,시간,분 등의 차이값을 구할 수 있다.
datepart 이름 | datepart약어 |
year | yy, yyyy |
quarter | qq, q |
month | mm, m |
dayofyear | dy, y |
day | dd, d |
week | wk, ww |
weekday | dw, w |
hour | hh |
minute | mi, n |
second | ss, s |
millisecond | ms |
microsecond | mcs |
nanosecond | ns |
기본예제
SELECT DATEADD(month, 1, '20220705');
SELECT DATEADD(month, 1, '2022-07-05');
SELECT DATEADD(month, 1, GETDATE());
이전월의 시작일 구하기
SELECT CONVERT(VARCHAR, LEFT(CONVERT(VARCHAR(10), DATEADD(M,-1, GETDATE()), 112), 6) +'01') + ' 00:00:00'
이전월의 마지막날 구하기
SELECT CONVERT(VARCHAR,DATEADD(M, -1, EOMONTH(GETDATE()))) + ' 23:59:59'
BETWEEN A AND B 함수를 사용하여 기간 검색을 해도 되고 >= <=를 사용하여 조건을 비교해도 된다.
WHERE CRT_TIME BETWEEN CONVERT(VARCHAR, LEFT(CONVERT(VARCHAR(10), DATEADD(M,-1, GETDATE()), 112), 6) +'01') + ' 00:00:00'
AND CONVERT(VARCHAR,DATEADD(M, -1, EOMONTH(GETDATE()))) + ' 23:59:59'
현재일자의 시작일자 만들기
SELECT CONVERT(VARCHAR, CONVERT(DATE, LEFT(CONVERT(VARCHAR(10),GETDATE(), 112), 6) + '01')) + ' 00:00:00'
현재일자 기준으로 마지막 날짜 구하기
SELECT CONVERT(VARCHAR,EOMONTH(GETDATE())) + ' 23:59:59'
EOMONTH 함수를 사용하면 현재일자의 마지막 날은 쉽게 구할 수 있다.
최근 몇 일 기준 조건에 부합하는 쿼리 생성
다음은 최근 7일기준에 만족하는 데이터를 조회하기 위한 예제이다.
AND CRT_TIME >= DATEADD(DAY, -7, GETDATE())
[REFERENE]
https://docs.microsoft.com/ko-kr/sql/t-sql/functions/dateadd-transact-sql?view=sql-server-ver16