WHERE절에 TO_CHAR 구문 질문드립니다. 0 6 4,778

by 조남규 [Oracle 기초] TO_CHAR 날짜 WHERE [2013.10.18 15:59:10]


우선 쿼리문입니다.

        SELECT A.SALE_MM
             , A.STORE_CD
 , DECODE('KR', 'KR', B.K_STORE_NM, B.G_STORE_NM) AS STORE_NM
             , A.TOT_SALE_AMT
                 , C.TOT_SALE_AMT AS LAST_MONTH_SALE
             , A.SALE_AMT
             , A.DC_AMT
             , A.BILL_CNT
             , C.BILL_CNT AS LAST_BILL_CNT
         FROM RU_SALE_MONTH A
             , MM_STORE B
              ,(SELECT STORE_CD, BILL_CNT, TOT_SALE_AMT  FROM RU_SALE_MONTH WHERE SALE_MM =  to_char(to_date(to_char(sysdate, 'yyyy-mm'), 'yyyy-mm') - 1, 'yyyy-mm')) C
WHERE A.STORE_CD = B.STORE_CD
       AND A.STORE_CD = C.STORE_CD
  AND A.CORP_CD = B.CORP_CD
  AND SALE_MM = #FROM_MONTH#
           AND B.CORP_CD     = #CORP_CD#

아래쪽에 (SELECT로 묶은 부분에.. SALE_MM = TO_CHAR로 SALE_MM기준으로

전 달을 가져와서 데이터를 뿌려주려고 합니다. 그냥 SALE_MM = '201309' 이런식으러 넣으면 작동하는데

원래 저런식으로 하면 안되는건가요?

그런데 먹지 않는것 같아서요..
by 조남규 [2013.10.18 16:13:40]
아 자체 해결 했습니다 ㅠㅠ syntax 오류와 구문을 잘못 쓴것 같아요

WHERE SALE_MM = TO_CHAR(ADD_MONTHS(TO_DATE(#FROM_MONTH#, 'YYYYMM'), -1)

이렇게 해결하였습니다.

by 아발란체 [2013.10.18 16:14:00]

에러가 나는 것인가요?
아니면 오류가 발생하는 것인가요?

일단 '201309'는 넣으면 되는데
'TO_CHAR...' 구문으로 조건을 넣으면 되지 않는 것은 그냥 봤을 때 서로 값이 틀립니다.

TO_CHAR... 구문으로 나오는 값은 마지막 형 변환 YYYY-MM으로 인해
2013-09 가 됩니다.

정리해서 되는 값은 '201309'
안 되고 있는 값은 '2013-09'

변환을 'YYYY-MM' 아닌 'YYYYMM'으로 해주면 값은 일치가 되어 동일한 결과가 나올 것 같습니다.



by 조남규 [2013.10.18 16:21:47]
답변감사합니다. 말씀하신대로 - 구분을 빼줬어야 하는데 빼주지 않았네요

그리고 외람된 질문이지만 컬럼에서 컬럼을 나누는 방법도 있나요? 오라클에

by 태우현 [2013.10.18 16:44:05]
컬럼을 나누는 기준에 따라 substr이나 정규식을 써서 나누시면 됩니다.

by 조남규 [2013.10.18 16:54:45]
답변 감사합니다. 나눗셈 연산을 말씀드린건데 이거는 프로그램단에서 해줘야 하는건가요?

by 우리집아찌 [2013.10.18 17:02:30]
 
WITH T ( a , b ) AS (
SELECT 0 , 1 FROM DUAL UNION ALL
SELECT 0 , 1 FROM DUAL UNION ALL
SELECT 1 , 0 FROM DUAL UNION ALL
SELECT 1 , 1 FROM DUAL 
)
SELECT NVL( a / NULLIF(b,0) , 0 ) FROM T
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입