MSSQL에서 SELECT문을 실행 하는데 주어지는 조건이 연도(year)와 월(month) 인데
검색하려는 테이블의 날짜 컬럼이 2개(시작일과 종료일)이며
자료형이 DATE 또는 VARCHAR(8)로 'yyyymmdd' 형식일 때
조건으로 주어지는 연,월이 시작일 ~ 종료일 사이에 포함되는 row를 찾으려고 하는 경우가 있다면
MSSQL 내장 함수 DATEFROMPARTS와 EOMONTH 를 활용할 수 있다.
-- 일반 쿼리에서 조건절에 바로 적용하는 예시
DECLARE @Year INT = 2023; -- 조회하려는 조건 연도
DECLARE @Month INT = 9; -- 조회하려는 조건 월
SELECT *
FROM Example_Table
WHERE
--DATEFROMPARTS(@Year, @Month, 1) 결과('2023-09-01')를 인자로 주고 EOMONTH의 결과('2023-09-30')를 StartDate과 비교
StartDate <= EOMONTH(DATEFROMPARTS(@Year, @Month, 1)) AND
EndDate >= DATEFROMPARTS(@Year, @Month, 1)
--조건 연도와, 월 그리고 일자에 1을 인자로 주고 반환되는 결과('2023-09-01')를 EndDate과 비교
-- 프로시저에서 변수에 우선 세팅하여 변수를 조건절에 활용하는 예시
CREATE PROCEDURE Example_Procedure
AS
BEGIN
DECLARE @Year INT = 2023; -- 조회하려는 조건 연도
DECLARE @Month INT = 9; -- 조회하려는 조건 월
DECLARE @StartDate DATE; -- 조건절에 사용할 연,월의 시작 일자 담을 변수
DECLARE @EndDate DATE; -- 조건절에 사용할 연,월의 마지막 일자 담을 변수
--조건 연도와, 월 그리고 일자에 1을 인자로 주고 변수에 결과('2023-09-01') 할당
SET @StartDate = DATEFROMPARTS(@Year, @Month, 1);
--위에서 조건절 시작일 변수를 인자로 주고 해당 일자의 월의 마지막 일자('2023-09-01')를 변수에 할당
SET @EndDate = EOMONTH(@StartDate);
SELECT *
FROM Example_Table
WHERE
StartDate <= @EndDate AND
EndDate >= @StartDate
END
최근댓글