Oracle Select랑 dual로 달력만드는데 맞나 확인좀 부탁드립니다 ㅠ 0 3 2,187

by 김태성 [Oracle 기초] [2015.03.22 14:46:33]


안녕하세요. 오라클 초짜입니다. 대학졸업하고 일본넘어와서 2년일하다가 일이 너무 한가하고 발전이 없어서 얼마전에 이직했는데...참 제가 얼마나 할줄 아는게 없었는지 뼈저리게 꺠닳고 있네요 ㅎㅎ...

아무튼 sql server는 써왔는데 썻다고 해봤자 셀렉트 인서트같은거만 써왔던거고 오라클은 처음이거든요.

회사 상사가 오라클 공부좀 해오라고 해서 과제를 하나 받아서 월요일아침에 답을 주겠다고 했는데 집에 오라클 설치가 잘 안되네요..결국 어제 하루종일 하다 포기하고 25일에 월급받으면 하드하나 사서 컴퓨터 포멧하고 다시 깔아보려구요..ㅠ

잡설이 길어젔는데 아무튼 그런고로 인터넷 조사해서 select문을 짜봤는데 확인이 불가능해서 많이 곤란합니다 ㅠ.ㅠ..

먼저 과제 내용은 테이블 만들지말고, dual이란 더미테이블 이용해서 2015년 1월1일부터 마지막날까지 날자, 요일, 쉬는날을 select해보라고 하더라구요.

그래서 짠게

Select * from (Select '2015/01/01,

                     To_CHAR('2015/01/01', 'DAY'),

                     DECODE(TO_CHAR('2015/01/01'. 'DAY'), '月曜日','0', '火曜日','0', '水曜日','0', '木曜日','0', '金曜日','0', '土曜日','1','日曜日','1')

from daul

Connect by level <= 365)

이렇게 짜봤습니다. 근데 이렇게하면 왠지 2015/01/01만 365개 나올 것 같기도 하고...이런식으로 쓰면 되는게 맞는지도 모르겠고..실행을 못해보니까 너무 답답하네요 ㅠㅠ...

맨처음 Select에 + ROWNUM -1 하면 될 것 같기도 하고...

주말 귀중한 쉬는시간을 뺏는게 참으로 염치없지만 도움좀 받을 수 있으면 정말 감사하겠습니다...

솔직히 3년차인데 맨날 뭐 물어볼때마다 한소리씩 듣는것도 매번 들으니까 짜증도나고 해외에 나와있고 다른 외국인들도 많은지라 내가 못하면 한국사람 이미지 나빠질 것 같은것도 있어서 그런것도 신경쓰이고 잘하고 싶은데 잘 안되니까 참 답답합니다. 뭐 이런거 하나 풀어간다고 뭐가 의미가 있는건 아니지만 그래도 제대로 해서 내놓고 싶어요 ㅠ.

 

by jkson [2015.03.22 15:35:30]
SELECT TO_DATE ('2015/01/01', 'yyyy/mm/dd') + LEVEL - 1 dt
      ,TO_CHAR (TO_DATE ('2015/01/01', 'yyyy/mm/dd') + LEVEL - 1, 'DAY') dayoweek
      ,DECODE (TO_CHAR (TO_DATE ('2015/01/01', 'yyyy/mm/dd') + LEVEL - 1, 'd')
                  ,'2', '0'
                  ,'3', '0'
                  ,'4', '0'
                  ,'5', '0'
                  ,'6', '0'
                  ,'7', '1'
                  ,'1', '1'
              ) holiday
  FROM DUAL
CONNECT BY LEVEL <= 365

DT DAYOWEEK HOLIDAY

2015-01-01 목요일 0
2015-01-02 금요일 0
2015-01-03 토요일 1
2015-01-04 일요일 1
2015-01-05 월요일 0
2015-01-06 화요일 0
2015-01-07 수요일 0
2015-01-08 목요일 0
2015-01-09 금요일 0
2015-01-10 토요일 1
2015-01-11 일요일 1
2015-01-12 월요일 0
2015-01-13 화요일 0
2015-01-14 수요일 0

....

level 가지고 하루씩 + 해주면서 찍어주면 되겠네요.

욕심만큼 많이 해보시면 금방 실력 늘어나실 거예요. 파이팅 하십쇼.

아 근데 그쪽에서 의도한 게 토요일 일요일만 쉬는 날로 찍어주는 것 맞나요?

 


by 김태성 [2015.03.22 18:59:12]

네 토요일 일요일만 휴일로 하면 되는 과제였어요^^ , 큰 도움 되었습니다. 정말 감사합니다 ^^


by 마농 [2015.03.23 09:42:38]
SELECT TO_CHAR(dt, 'yyyy/mm/dd') dt
     , TO_CHAR(dt, 'day') dayoweek
     , CASE WHEN TO_CHAR(dt, 'd') IN ('1', '7') THEN 1 ELSE 0 END holiday
  FROM (SELECT dt + LEVEL - 1 dt
          FROM (SELECT TO_DATE('2015'||'01', 'yyyymm') dt FROM dual) -- 입력년도 한번만 사용
         CONNECT BY LEVEL <= TO_CHAR(ADD_MONTHS(dt, 12) - 1, 'ddd')  -- 윤년 적용
        )
;

 

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