조건절 처리하려는데 잘 안되서 질문드립니다. 0 5 919

by 모레츠 [2013.02.07 09:09:21]



abc 라는 칼럼이 날짜가 있는 칼럼인데요
제가 화면에서 파라미터를 A를 받으면 abc 라는 칼럼이 현재 날짜 기준으로 3개월 이하
B받으면 6개월 이하 이런식으로 구현을 해야하는데

그래서 찾아보니

months_between(sysdate, abc) 이렇게 하면 달별 계산이 되더라구요

그래서 where 절에 파리미터값 = 'A' 이면 months_between(sysdate, abc) <= 3 or 파라미터값 = 'B'이면 months_between(sysdate, abc) <= 6 이런식으로 했는데 안되가지고 제 방법이 잘못된건지 좀 도움을 요청합니다.
by 신이만든짝퉁 [2013.02.07 09:16:46]
where abc between decode(:parameter, 'A', months_between(sysdate, -3), 'B', months_between(sysdate, -6))
and sysdate

이렇게 한 번 해보세요

by 마농 [2013.02.07 09:22:44]

비교는 abc 에 Months_Between 하지 마시고
abc 는 그대로 두고 sysdate 에 Add_Months 해서 비교하시는게 좋습니다.


날짜 컬럼에 대한 문제는 컬럼의 타입에 따라 풀이가 다릅니다.
우선 날짜가 저장된 컬럼 abc 의 데이터 타입 및 저장 형식을 알려주세요.
Date 인지? Varchar2 인지? Varchar2 라면 자리수와 저장형식은?


1. Date Type 인 경우
WHERE abc >= ADD_MONTHS(sysdate, -DECODE(:v, 'A', 3, 'B', 6))
2. Varchar2(8) 'yyyymmdd' 인 경우
WHERE abc >= TO_CHAR(ADD_MONTHS(sysdate, -DECODE(:v, 'A', 3, 'B', 6)), 'yyyymmdd')


by 신이만든짝퉁 [2013.02.07 09:41:16]
앗~~ 제가  add_months  와  months_between을 착각했군요.

where abc between decode(:parameter, 'A', add_months(sysdate, -3), 'B', add_months(sysdate, -6))
and sysdate

원래 의도했던 것은 위 쿼리입니다.

하지만 마농님께서 올려주신 쿼리가 더 간격하고 명확하네요~

저도 배워갑니다.

by 모레츠 [2013.02.07 10:52:49]
Varchar2(8) 입니다.

by 모레츠 [2013.02.07 10:53:54]
 답변들 감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입