MSSQL 날짜 사이 특정 요일 날짜 구하기

조금 생소한 제목 입니다. 많이 구현하지 않는 방식으로 이상한 현업의 이상한 요구 사항으로 만들어 봤는데 나중에 쓰임이 있지 않을까하고 몇자 적어 봅니다.
제목을 간단하게 풀어보면, From ~ To와 같이 시작일과 종료일 사이에 특정 요일에 해당하는 날짜들을 추출하는 쿼리를 구한다는 의미 입니다.


하여 오늘은 MSSQL 날짜 사이 특정 요일 날짜 구하기에 대해서 알아보도록 하겠습니다.





-- 먼저 From ~ To와 같이 시작일과 종료일 셋팅 합니다.
DECLARE @FromDate VARCHAR(10) = '2019-06-01'
DECLARE @ToDate VARCHAR(10) = '2019-12-31'


DECLARE @FromDiff SMALLINT;
DECLARE @ToDiff SMALLINT;

DECLARE @MIN SMALLINT = 1;
WHILE (@MIN <= 2)
BEGIN
  IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 1) -- 일요일
   IF (@MIN = 1) SET @FromDiff = 4 ELSE SET @ToDiff = 4;
  ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 2) -- 월요일
   IF (@MIN = 1) SET @FromDiff = 3 ELSE SET @ToDiff = 3;
  ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 3) -- 화요일
   IF (@MIN = 1) SET @FromDiff = 2 ELSE SET @ToDiff = 2;
  ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 4) -- 수요일
   IF (@MIN = 1) SET @FromDiff = 1 ELSE SET @ToDiff = 1;
  ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 5) -- 목요일
   IF (@MIN = 1) SET @FromDiff = 0 ELSE SET @ToDiff = 0;
  ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 6) -- 금요일
   IF (@MIN = 1) SET @FromDiff = 6 ELSE SET @ToDiff = 6;
  ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 7) -- 토요일
   IF (@MIN = 1) SET @FromDiff = 5 ELSE SET @ToDiff = 5;

 SET @MIN = @MIN + 1;
END




SET @FromDate  = CONVERT(VARCHAR(10), DATEADD(D, @FromDiff, @FromDate), 120) -- 시작일 해당주 목요일
SET @ToDate  = CONVERT(VARCHAR(10), DATEADD(D, @ToDiff, @ToDate), 120) -- 종료일 해당주 목요일

SELECT @FromDate, @ToDate

WHILE (@FromDate <= @ToDate)
BEGIN
 SELECT @FromDate

 SET @FromDate = CONVERT(VARCHAR(10), DATEADD(D, 7, @FromDate), 120);
END


이상으로 MSSQL 날짜 사이 특정 요일 날짜 구하기에 대해서 알아보았습니다.
미세먼지가 심합니다. 모두 마스크 사용하시고 건강하세요.

댓글

이 블로그의 인기 게시물

껌 떼는 법 (완벽 제거)

석청 효능 및 석청 부작용 알아보기

인성검사 팁 (인성검사 합격)