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월에서 말일 사이여야한다는 오류가 뜨네요..
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 ;