오라클 쿼리문 질문드립니다.. 0 3 3,125

by ymym [SQL Query] ORACLE [2019.03.13 15:44:35]


        SELECT TO_CHAR(TO_DATE(CORD_DTE,'YYYYMMDD'),'YYYY-MM-DD') CORD_DTE, CUST_NME, ITEM_NME, (UPD_THI||'*'||UPD_HEI||'*'||UPD_HOR||'*'||UPD_VER) STANDARD,
               ITEM_PRC_CDE, TO_CHAR(CORD_PRC,'999,999') CORD_PRC, CORD_QTY, TO_CHAR(B.CORD_AMT_TOT,'999,999') TOTAL,
                CASE WHEN SUBSTR(CORD_DLY_DTE,1,2) != '20'  THEN 'ERROR' ELSE TO_CHAR(TO_DATE(CORD_DLY_DTE, 'YYYYMMDD'), 'YYYY-MM-DD') END CORD_DLY_DTE
          FROM MKT0TB011 B, MKT0TB060 C, MKT0TB010 D, MST0TB002 E
         WHERE B.ITEM_NBR = C.ITEM_NBR(+)
           AND B.CORD_NBR = D.CORD_NBR(+)
           AND D.CUST_NBR = E.CUST_NBR(+)

 

마지막 CORD_DLY_DTE에 그냥 날짜 형식을 줬는데 날짜형식이 부적합하다고 해서 확인해봤더니 값에  3, 6 이런 값들이 들어가 있더라고요. 대신에 스페이스바로 8자리는 다 맞아서 CASE문으로 조건을 줘서 위와 같이 바꿔놓은 상태로 쿼리문 돌리니.. 이번에는 달의 날짜는 1월에서 말일 사이여야한다는 오류가 뜨네요.. 

by 마농 [2019.03.13 16:05:36]

a. b. 없이 그냥 컬럼명만 적으면 쿼리 분석이 힘듭니다.
우선, 어떤 오류 자료가 있는지?
오류 자료를 찾아 보세요.

WITH t AS
(
SELECT '3       ' cord_dly_dte FROM dual  -- 오류
UNION ALL SELECT '20190101' FROM dual     -- 정상
UNION ALL SELECT '20190229' FROM dual     -- 일 오류
UNION ALL SELECT '20191301' FROM dual     -- 월 오류
)
SELECT cord_dly_dte
  FROM t
     , XMLTABLE('if (. castable as xs:date) then 1 else 0' PASSING cord_dly_dte COLUMNS gb NUMBER PATH '.')
 WHERE gb = 0
;

 


by ymym [2019.03.13 17:46:39]

그대로 복사해서 붙여넣으니 잘못 적힌 데이터들이 출력되네요..!! 감사합니다. 이데이터보고 조건줘서 출력하면 될 것 같습니다.

혹시 코드에서 모르는 부분이 있는데 질문해도 될까요?

1....  '3     ' 이부분이 무슨뜻인가요?

2.... 

     , XMLTABLE('if (. castable as xs:date) then 1 else 0' PASSING cord_dly_dte COLUMNS gb NUMBER PATH '.')

 WHERE gb = 0

이부분 설명좀 부탁드립니다..! 

 


by 마농 [2019.03.13 17:54:12]

1. 테스트용 샘플 데이터 입니다.
2. 날짜변환 가능여부를 찾는 구문입니다.

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