특정 시작일에서 종료일 까지 기간에서 특정 요일의 날짜를 추출하는 쿼리 입니다.
잘 사용은 안하지만 이번에 사용할 일이 있어서 짜보았는데 음...
잘되는것 같아 포스팅 해보았습니다.
DECLARE @ReportDateFrom VARCHAR(10) = '2017-12-21'
DECLARE @ReportDateTo VARCHAR(10) = '2018-03-07'
DECLARE @DATEPART_FROM SMALLINT = DATEPART(DW, @ReportDateFrom);
DECLARE @DIFF_FROM SMALLINT;
DECLARE @DATEPART_TO SMALLINT = DATEPART(DW, @ReportDateTo);
DECLARE @DIFF_TO 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 @DIFF_FROM = 4 ELSE SET @DIFF_TO = 4;
ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 2) -- 월요일
IF (@MIN = 1) SET @DIFF_FROM = 3 ELSE SET @DIFF_TO = 3;
ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 3) -- 화요일
IF (@MIN = 1) SET @DIFF_FROM = 2 ELSE SET @DIFF_TO = 2;
ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 4) -- 수요일
IF (@MIN = 1) SET @DIFF_FROM = 1 ELSE SET @DIFF_TO = 1;
ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 5) -- 목요일
IF (@MIN = 1) SET @DIFF_FROM = 0 ELSE SET @DIFF_TO = 0;
ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 6) -- 금요일
IF (@MIN = 1) SET @DIFF_FROM = 6 ELSE SET @DIFF_TO = 6;
ELSE IF (CASE WHEN @MIN = 1 THEN @DATEPART_FROM ELSE @DATEPART_TO END = 7) -- 토요일
IF (@MIN = 1) SET @DIFF_FROM = 5 ELSE SET @DIFF_TO = 5;
SET @MIN = @MIN + 1;
END
SET @ReportDateFrom = CONVERT(VARCHAR(10), DATEADD(D, @DIFF_FROM, @ReportDateFrom), 120) -- 시작일 해당주 목요일
SET @ReportDateTo = CONVERT(VARCHAR(10), DATEADD(D, @DIFF_TO, @ReportDateTo), 120) -- 종료일 해당주 목요일
SELECT @ReportDateFrom, @ReportDateTo
WHILE (@ReportDateFrom <= @ReportDateTo)
BEGIN
SELECT @ReportDateFrom
SET @ReportDateFrom = CONVERT(VARCHAR(10), DATEADD(D, 7, @ReportDateFrom), 120);
END
'IT > MSSQL' 카테고리의 다른 글
ALTER TABLE (동적으로 테이블에 컬럼 추가) (0) | 2018.03.29 |
---|---|
mssql 날짜 포맷 모음 (0) | 2018.02.28 |
MSSQL 반올림, 자르기(절삭), 올림, 내림 (0) | 2018.02.19 |
십단위 올림 (0) | 2018.02.19 |
로우 합치기 (0) | 2018.02.02 |