ibatis에서 두 월 사이의 데이터 출력 할때 조건절... 0 9 2,987

by 김새롬 [2013.07.01 17:29:41]


jsp 페이지에서 셀렉 박스로 year를 셀렉트 하고, 그 year 에 해당하는 month를 셀렉트 하구요.

같은 방식으로 end year, month 를 셀렉트 해서 결과적으로는 두 month 사이의 데이터를 출력하는 복잡한(ㅡ.ㅠ) 구조인데

요. ibatis 에서 조건문을 어떻게 줘야 할지를 모르겠네요..

밑의 쿼리가 돌아가긴 하는데, ibatis 에서 적용 시키려면 어떻게 변형 시키면 되는거죠 ㅠㅠ?
 
SELECT 
 TO_CHAR(ADD_MONTHS(TO_DATE('201303','YYYYMM'),LEVEL-1), 'YYYYMM') AS Month
 FROM DUAL
CONNECT BY ADD_MONTHS(TO_DATE('201303','YYYYMM'),LEVEL-1 ) <= TO_DATE('201311', 'YYYYMM');
by 용근님 [2013.07.01 17:52:19]

<=  요부분의 CDATA 설정 방법 말씀하시는건가요?

by 김새롬 [2013.07.01 19:20:02]
<isNotEmpty property="startMONTH" prepend="AND">
<isNotEmpty property="endMONTH">
#startMONTH# <![CDATA[<=]]> TO_CHAR(TO_DATE(MONTH, 'YYYY-MM-DD'), 'YYYYMMDD') AND #endMONTH# <![CDATA[>=]]> TO_CHAR(TO_DATE(MONTH, 'YYYY-MM-DD'), 'YYYYMMDD'))
</isNotEmpty>
    </isNotEmpty>

아니요. 위에처럼 저런 형식으로 써봤는데 이렇게 해봤는데 안되네요...

by 아발란체 [2013.07.02 09:30:48]

그냥 보면 끝에 괄호 하나 더 들어 간 것 같아요.
에러도 올려주시면 도움이 될 것 같습니다.


by 김새롬 [2013.07.02 11:01:58]
ibatis 로 조건 주는것은 아예 감이 안와서 포기했구요ㅠㅠ

셀렉트 박스에서 5월과 7월을 택해서, 5월 1 일 ~ 7월 31일 까지의 데이터를 출력 하려면 아래처럼 쿼리 짜면 되는거 아닌가요?ㅠㅠ 이때 startMONTH와 endMONTH은 빈에 선언 해주구요...

SELECT 
            TO_CHAR (TO_DATE (#startMONTH#,'YYYY-MM')+LEVEL- 1, 'YYYY.MM') AS DAY
            
       FROM DUAL
       CONNECT BY TO_DATE(#startMONTH#, 'YYYY-MM') + LEVEL - 1  TO_DATE(#endMONTH#, 'YYYY-MM')

이렇게 돌려보면요, 에러는 안뜨는데 아무 데이터 출력이 안되네요 ..
5월1일에서 7월31일 까지 날짜로 조회하면 해당 데이터 출력이 되는데, 위 쿼리로 월별로
조회하면 아무것도 안떠요..쿼리에 문제가 있나요?ㅠㅠㅠ


by 아발란체 [2013.07.02 13:26:23]
--조금 빠진 부분이 있네요~
--5, 6, 7월을 표시하는게 아니라 5월1일 식의 일까지 표시하는 것이라면
--DD까지 들어가고 +1 하는 것이 좋을 것 같아요.
SELECT
 TO_CHAR(TO_DATE('20130501', 'YYYY-MM-DD') + LEVEL - 1, 'YYYY-MM-DD') AS temp
FROM
 DUAL
CONNECT BY
 TO_DATE('20130501', 'YYYY-MM-DD') + LEVEL - 1 <= TO_DATE('20130731', 'YYYY-MM-DD')
;

by 아발란체 [2013.07.02 13:28:24]
그리고 에러가 안뜨는게 이상하네요 >ㅅ<)/
올려주신 CONNECT BY 구문에 관계 연산자가 없기 때문에 오류가 떠야 하거든요.

by 김새롬 [2013.07.02 17:45:36]
답변 감사드립니다. 제가 5월1일 부터 7월31일 까지의 일짜별 검색을 통해서 데이타 출력이 아니었구요..
셀렉트 박스에서 5월과 7월을 선택하면 쿼리가 5월 첫째날 부터 7월 마지막 날 까지의 데이터를 불러올수 있도록 짜려고 했거든요,  질문이 애매해서 너무 죄송합니다 ㅠㅠㅠ


SELECT ...
 FROM
 (SELECT 
 TO_CHAR (TO_DATE (#startDt#,'YYYY-MM-DD')+LEVEL- 1, 'YYYY.MM.DD') AS DAY
 FROM DUAL
 CONNECT BY TO_DATE(#startDt#, 'YYYY-MM-DD') + LEVEL - 1 <= TO_DATE(#endDt#, 'YYYY-MM-DD')
 ) DAY LEFT OUTER JOIN
 ( 
 SELECT ...
 FROM ...
 WHERE... 
GROUP BY ...
이런 구조의 쿼리 라면 저 날짜 부분을 어떻게 변경 해줘야 하는 건가요ㅠㅠ? SUM 함수를 이용해서 5워 한 달간의 날짜를 더해서 해당 데이터를 가져오는 건가요?

by 용근님 [2013.07.02 11:09:55]

CONNECT BY LEVEL <= MONTHS_BETWEEN(TO_DATE (#to#, 'YYYY-MM'), TO_DATE (#from#, 'YYYY-MM') )

by 용근님 [2013.07.02 11:18:55]

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