MSSQL에서 SELECT문을 실행 하는데 주어지는 조건이 연도(year)와 월(month) 인데

 

검색하려는 테이블의 날짜 컬럼이 2개(시작일과 종료일)이며

 

자료형이 DATE 또는 VARCHAR(8)로 'yyyymmdd' 형식일 때

 

조건으로 주어지는 연,월이 시작일 ~ 종료일 사이에 포함되는 row를 찾으려고 하는 경우가 있다면

 

MSSQL 내장 함수 DATEFROMPARTSEOMONTH 를 활용할 수 있다.

 

 

-- 일반 쿼리에서 조건절에 바로 적용하는 예시

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

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기