특정 기간에 날짜 속한 달을 다 구하고 싶습니다. 1 4 710

by 기냥이 [SQLServer] [2022.01.12 09:37:29]


안녕하세요.

여러가지 검색을 해서 구현을 하려고 해도 원하는 자료가 나오지 않아 글을 남기게 됐습니다.

기초자료

- DB: MS-SQL 2008 R2

- 기초 데이터

WITH T AS (
 SELECT 'code1' AS code,'20210101' AS 시작일,'20210601' AS 종료일 FROM DUAL UNION ALL
 SELECT 'code2','20210501','20210801' FROM DUAL
)
select
    code,시작일,종료일
from
    t;

- 원하는 결과값

code1 202101
code1 202102
code1 202103
code1 202104
code1 202105
code1 202106
code2 202105
code2 202106
code2 202107
code2 202108

   

 

by 마농 [2022.01.12 10:33:11]
WITH t AS
(
SELECT 'code1' code, '20210101' sdt, '20210601' edt
UNION ALL SELECT 'code2', '20210501', '20210801'
)
, t1 AS
(
SELECT code
     , DATEADD(month, 0, sdt) sdt
     , DATEADD(month, 0, edt) edt
     , DATEADD(month, 0, sdt) dt
  FROM t
 UNION ALL
SELECT code
     , sdt
     , edt
     , DATEADD(month, 1, dt) dt
  FROM t1
 WHERE dt < edt
)
SELECT code
     , CONVERT(VARCHAR(6), dt, 112) ym
  FROM t1
 ORDER BY code, ym
;

 


by 기냥이 [2022.01.12 11:42:25]

이렇게 신경 써주셔서 감사합니다.


by 뉴비입니다 [2022.01.12 11:21:15]

공부하는 분들을 위해 Oracle Version도 올려봅니다

WITH a AS
(
SELECT 'code1' code, '20210101' sdt, '20210601' edt FROM DUAL
UNION ALL 
SELECT 'code2', '20210501', '20210801' FROM DUAL
)
, b (code, sdt, edt, dt) AS
(
    SELECT code, ADD_MONTHS(sdt, 0) sdt, ADD_MONTHS(edt, 0) edt, ADD_MONTHS(sdt, 0) dt
      FROM a
        UNION ALL
    SELECT code, sdt, edt, ADD_MONTHS(dt, 1) dt
      FROM b
    WHERE dt < edt
)
SELECT code, TO_CHAR(dt, 'YYYYMM') result
  FROM b
ORDER BY code, result;

by 기냥이 [2022.01.12 11:42:34]

이렇게 신경 써주셔서 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입