날짜질문 from to 0 11 1,318

by 개발고수가되기를 [SQL Query] [2019.08.23 15:53:23]


1로우에 from ~ to로 a, b 필드가 있습니다.

a필드: 20180101 b: 20180103

 

근데 실제 값은 누가봐도 1일 2 일 3일까지 휴가 인데 실제 값은 각각 a필드: 20180101 b: 20180103 이고 20180102는 없는 값이죠...

이 값을 얻어 내는 쿼리가 찾아보니 아래와 같은 쿼리가 있더라고요

조회해 보면

20180101

20180102

20180103

 

SELECT TO_CHAR(YMD,'yyyymmdd')

 FROM(

          SELECT TO_DATE ('20180101', 'YYYYMMDD')+(LEVEL - 1) YMD

           FROM DUAL

          CONNECT BY TO_DATE ('20180101', 'YYYYMMDD')+(LEVEL-1) <=TO_DATE ('20180103', 'YYYYMMDD'))

원하는 답은 나오기는 했는데 로우 데이터를 저 값과 합쳐 쓰려니 대략 난감인데  간단한 함수라든지 중간값 얻어 내는 쿼리 있을까요?

 

근데 달력마스터와 조인해서 걸어야 하는데 매우 난감하네요....

from to 같은 값일때는 어떻게 값을 생성해서 합쳐 데이터를 보여 주면 좋을까요 간결하게...

너무 어렵네요 몇일째 고민하는데 하수라 손가락이 안 움직입니다 ㅠ

by 우리집아찌 [2019.08.23 16:03:01]

출력하고 싶은 양식은 어떻게 되나요?


by 개발고수가되기를 [2019.08.23 16:08:10]

기존에 입력되어 있는 from, to 필드 값이 있다면 from, to사이에 일자 값들을 한로우에  추출해 보고 싶어요 그럼 일단 어떻게든 쿼리로 해결이 가능하지 않을까 싶어서요...한필드라고 하면 substr이라도 8자리로 짤라서  사용하던지 하려고요...


by 개발고수가되기를 [2019.08.23 16:12:09]

달력마스터가 기준이 일자별로

20190101

20190102

20190103

요렇게 되서 로우별로 처리가 되야 하거든요...


by 마농 [2019.08.23 16:17:20]
-- 기존 달력 테이블이 있다면 그냥 조인하면 됩니다.
WITH data_t AS
(
SELECT '20190101' sdt, '20190103' edt FROM dual
)
, calendar_t AS
(
SELECT '20190101' dt FROM dual
UNION ALL SELECT '20190102' FROM dual
UNION ALL SELECT '20190103' FROM dual
UNION ALL SELECT '20190104' FROM dual
)
SELECT a.sdt
     , a.edt
     , b.dt
  FROM data_t a
     , calendar_t b
 WHERE b.dt BETWEEN a.sdt AND a.edt
;

 


by 개발고수가되기를 [2019.08.23 16:21:55]

아고 감사합니다 근데 data_t에 서 temp data라고 해야하나 이값을 원래 쿼리에서 뽑아내면 조인걸때 sdt로 조인을 걸어야 할까요 기준이 뭔가 좀 모호해지는거 같아서요...


by 마농 [2019.08.23 16:33:35]

뭐가 모호한지 정확하게 표현해 주세요.
예를 들어 주면 더욱 좋구요.


by 개발고수가되기를 [2019.08.23 16:42:11]

아래와 같은 from to  휴가테이블 구조 인데

from / to

20170101 / 20170103

20170101 / 20170105

20170312 / 20170318

 

이걸 달력테이블 PK 값이 일자인 값에 조인을 걸어 사용하려다 보니 안되고 있습니다

달력테이블 PK 일자

20110101

20110102

20110103

20110104...

 

 

 


근데 이게 from to 사이의 중간 값을 구한다고해도

from, to 이 값들을 어떻게 달력 테이블 날자에 조인을 걸어 일자별 데이터를 추출할지 고민입니다..

 

 

현재 하려는것을 아우룩처럼 휴가자 달력을 보고 싶다고 해서 개발진행 중인 건 입니다...


이번 주말도 컴퓨터 앞에서 지내야겠군요


너무 답답해서 올려 봤습니다....

 


by 마농 [2019.08.23 16:51:19]

조인 방법 알려드렸는데 뭐가 문제인지? 이해가 안가네요?


by 개발고수가되기를 [2019.08.23 17:01:44]

달력화면이라 일자가 중복되게 2번 나오면 안되거든요...이미 달력화면은 짜져 있는 상태라서요...


by 마농 [2019.08.23 16:55:36]
WITH data_t AS
(
SELECT 1 id, '20170101' sdt, '20170103' edt FROM dual
UNION ALL SELECT 2, '20170101', '20170105' FROM dual
UNION ALL SELECT 2, '20170312', '20170318' FROM dual
)
, calendar_t AS
(
SELECT TO_CHAR(dt + LEVEL - 1, 'yyyymmdd') dt
  FROM (SELECT TO_DATE('201701', 'yyyymm') dt FROM dual)
 CONNECT BY LEVEL <= 99
)
SELECT a.id
     , a.sdt
     , a.edt
     , b.dt
  FROM data_t a
     , calendar_t b
 WHERE b.dt BETWEEN a.sdt AND a.edt
 ORDER BY a.id, a.sdt, b.dt
;

 


by 개발고수가되기를 [2019.08.23 17:08:49]

헉 이게 calendar_t 가 기준이되고 data_t 그냥 from to를 나타내 주는거죠 이해가 될듯 말듯 하네요 진짜 짱이세여

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