날짜 뽑아오는 쿼리 질문드립니다 0 6 486

by 푸릉이 [2019.12.16 10:29:23]


좀 특이하게 생긴 날짜 테이블이 있습니다

 국가코드,  휴일플래그 

KOR  , 01AUG

KOR, SAT

KOR, SUN

KOR, 01JAN

KOR, 20191225

USA, SAT

USA, 20181010

.........

국가코드가 있고, 휴일날짜 패턴이 SAT처럼 요일을 지정하면 토요일이 다나와야하고 날짜영문달명이 나오면 매해 해당날짜가 나와야하고 2018010처럼 지정한 날도 포함되어야합니다

 

제가  원하는 결과는 SYSDATE로부터 미래 1년치 국가코드별로  휴일날짜를 구하고 싶습니다

KOR 20200801  ----01AUG

KOR 20191221 ----토요일

KOR 20191222 ----일요일

KOR 20200101 ----JAN01

KOR 20191225

이런식이고 토요일 일요일은 계속 뽑아오구요

USD에 대해서도 마찬가지입니다

생각처럼 잘 안돼서 좋은 방법 있을까요

by 마농 [2019.12.16 11:03:53]
WITH holiday AS
(
SELECT 'KOR' na_cd, '01AUG' hu_cd FROM dual
UNION ALL SELECT 'KOR', 'SAT'      FROM dual
UNION ALL SELECT 'KOR', 'SUN'      FROM dual
UNION ALL SELECT 'KOR', '01JAN'    FROM dual
UNION ALL SELECT 'KOR', '20191225' FROM dual
UNION ALL SELECT 'USA', 'SAT'      FROM dual
UNION ALL SELECT 'USA', '20181010' FROM dual
)
, calendar AS
(
SELECT TRUNC(sysdate) + LEVEL - 1 dt
  FROM dual
 CONNECT BY LEVEL <= 365
)
SELECT b.na_cd
     , TO_CHAR(a.dt, 'yyyymmdd') hu_dt
     , LISTAGG(b.hu_cd, ', ') WITHIN GROUP(ORDER BY b.hu_cd) hu_cd
  FROM calendar a
     , holiday  b
 WHERE b.hu_cd IN ( TO_CHAR(a.dt, 'yyyymmdd')
                  , TO_CHAR(a.dt, 'DY'   , 'nls_date_language=american')
                  , TO_CHAR(a.dt, 'ddMON', 'nls_date_language=american')
                  )
 GROUP BY b.na_cd, a.dt
 ORDER BY b.na_cd, a.dt
;

 


by 푸릉이 [2019.12.16 14:53:17]

와 이래 줄어둘수 있다니.전 벌써 50라인이 넘어가고있는데....   04jul  이 만약 토요일이랑 겹치면 이상하게 나오네요   


by 마농 [2019.12.16 15:00:07]

뭐가 어떻게 이상한가요?


by 푸릉이 [2019.12.16 15:06:13]

USA     20200704  04JUL, 20200704, SAT 

이줄이 이렇게 로우로 나옵니다

근데 이결과가 맞는거 같네요

하나의 날짜만.나와야하니..


by 마농 [2019.12.16 15:12:37]

제가 처음에 두줄로 나오게 답변 달았다가
한줄로 나오는게 맞을 것 같아서 답변 수정했는데. -> Group By 와 ListAgg 추가
수정 전 답변을 보셨나요? 어떤 답변 쿼리로 실행하신 걸까요?


by 푸릉이 [2019.12.16 15:20:22]

아니요 못봤습니다 하지만  지금 달려있는게 정답입니다 고맙습니다 꾸벅

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