예를들면 오늘이 9월15일이니깐 9월 15일 ~ 11월 30일까지 날짜만
아래처럼 쭉 뽑아 보고 싶은데 어떻게 접근해야 할지 모르겠습니다.
이것저것 해봐도 안되고 해서 이렇게 질문드립니다.
명쾌한 답변 부탁드립니다.
년도 월 일
-------------
2005 09 15
2005 09 16
2005 09 17
2005 09 18
~
2005 11 29
2005 11 30
달력테이블을 만들어 조인하세요...
SELECT TO_DATE ('20050915', 'YYYYMMDD') + ROWNUM - 1 FROM dict WHERE ROWNUM <= TO_DATE ('20051130', 'YYYYMMDD') - TO_DATE ('20050915', 'YYYYMMDD') + 1
-- Oracle SQL Tuning 까페 http://cafe.daum.net/oraclesqltuning
select trunc(sysdate) + rownum - 1 from dictwhere trunc(sysdate) + rownum - 1 < = last_day(add_months(trunc(sysdate), 2));
오호.. rownum 을 쓰는 방법이 있군요... 멋진 쿼리네요
2개월 정도야 오버헤드도 얼마 없을테고..
* 2개월 이상일 경우
DICT 테이블의 문제점은 총 건수이상 처리를 못합니다.
오라클 버전 9i 이상이시면은 다음과 같이 처리하면 됩니다.
SELECT * FROM ( SELECT TO_DATE('20050915', 'YYYYMMDD') + LEVEL - 1FROM DUAL CONNECT BY LEVEL <= TO_DATE('20151130', 'YYYYMMDD') - TO_DATE('20050915', 'YYYYMMDD') + 1);
오라클 10g 이상이면은 인라인뷰 안 감싸도 됩니다.
http://angel.sarang.net
그냥 간단히 아래와 같이 해도 되겠군요.
SELECT TO_DATE ('20050915', 'YYYYMMDD') + LEVEL - 1 FROM DUALCONNECT BY LEVEL <= TO_DATE ('20151130', 'YYYYMMDD') - TO_DATE ('20050915', 'YYYYMMDD') + 1
진주님 쿼리는 버전에 따라 문제가 있습니다.제가 글에도 명시했듯이 오라클 10g 이상이면은 인라인뷰 안 감싸도 됩니다.
즉 진주님 위 쿼리는 9i에서는 한건만 나옵니다.10g는 그렇게 처리해도 됩니다.
추석 잘 보내세요 ^^
보규니님께...
인라인 뷰 감싸고 안싸고의 차이가 무엇이기에 결과의 차이를 가져오는 지를 설명해주실 수 있습니까?
저거...
명백한 논리적 에러인 듯 한대요...
같은 맥락인 것 같은데요...
님의 SQL을 보고 테스트한 결과 입니다...
이유를 설명해주실 수 있는지요...
SQL> SELECT TO_DATE('20050915', 'YYYYMMDD') + LEVEL - 1 dt,level 2 FROM DUAL CONNECT BY prior dummy = dummy 3 /
DT LEVEL-------- ----------05/09/15 1
경 과: 00:00:00.00SQL> select * from ( 2 SELECT TO_DATE('20050915', 'YYYYMMDD') + LEVEL - 1 dt,level 3 FROM DUAL CONNECT BY prior dummy = dummy 4 ) 5 /ERROR:ORA-01436: CONNECT BY의 루프가 발생되었습니다
선택된 레코드가 없습니다.
경 과: 00:00:00.00SQL>
진주, 흥수님의 궁금한점은 여기 url 클릭하시면은
다 해결될것입니다.
http://asktom.oracle.com/pls/ask/f?p=4950:8:387315723860040019::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:40476301944675
즐거운 추석 되세요 ^____^
흠... 재밌군요.
쓸모가 많겠네요.
보규니님 ...
감사합니다.^^
즐거운 추석 되시구요..
글구
SQL 튜닝 툴을 만드신 거 있으시던데요...
저도 받아 보았습니다.
VC로 만드신거 같던데요..
OLE-DB쓰셔서...
근데 궁금한점이 한가지...
왜 OCI 안 쓰셨죠?
한계점이 많을텐데요...
사실 저같은 경우 비슷한 거 만든게 있습니다.
C# 써서 ADO.NET 쓰고...
근데 한계점이 많아서
데이타 처리 부분을 OCI로 바꾸려고 하고 있습니다.(현재는 바빠서 손에서 놓은 상태입니다,....)
아직 제가 만든 것은 미완성이구요...
같이 고민하며 만들어보는 것도 좋으리라 생각합니다.
생각있으시면 연락을 주셔도 좋구요.(protokhs@hotmail.com==>MSN 저는 메일은 잘 확인 안합니다.^^)
그리구 제가 만든 것은 튜닝툴은 아니고 개발 보조도구입니다.
SQL 템플릿을 사용한 PL-SQL 코드 제네레이터를 가지고 있어서 테이블을 선택하면 해당 테이블의 하위 테이블을 모두 삭제하는 PL-SQL 프로시져를 자동으로 생성할 수도 있고...확장가능한 템플릿 언어를 가지고 있어서 실제 프로젝트에서 SQL만 만들면 HTML 을 제네레이트 하도록 정의하여 사용하기도 했었습니다...
(편집기는 제가 직접 C#으로 만들었고 신택스하이라이트,코드인사이트,자동 들여쓰기 내어쓰기, 괄호 맞춤 기능,열모드 기능 등이 지원됩니다. 편집기는 소스를 데브피아에 올려놓았구요)
관심 있으시면 연락한번 주십시오.
^^