안녕하세요. 아래 쿼리를 실행하면 ORA-01840: 입력된 값의 길이가 날짜 형식에 비해 부족합니다 라고 나오는데 어디가 문제인지 모르겠습니다. and a.age >= 7를 빼면 조회가 되는데 이걸 넣으면 날짜 형식 오류가 나는데 months_between 리턴값은 숫자 아닌가요? 뭐가 문제인지... 도와주세요... SELECT DEPTCODE, EMPNO, EMPNAME, ENTERDATE, WORK_YEAR, WORK_MONTH, FAMILYNAME, RELATIONCODE, RESIDENTNO1, AGE, CASE WHEN AGE BETWEEN 20 AND 27 THEN 'University' WHEN AGE BETWEEN 17 AND 19 THEN 'high school' WHEN AGE BETWEEN 14 AND 16 THEN 'middle School' WHEN AGE BETWEEN 8 AND 13 THEN 'elementary' ELSE 'Preschool' END AS SCHOOL FROM ( SELECT T1.DEPTCODE, T1.EMPNO, T1.EMPNAME, T1.ENTERDATE, FUN_CALC_YEARS_CNT(ENTERDATE,TO_CHAR(SYSDATE, 'yyyymmdd'), 'Y') WORK_YEAR, FUN_CALC_YEARS_CNT(ENTERDATE,TO_CHAR(SYSDATE, 'yyyymmdd'), 'M') WORK_MONTH, T2.FAMILYNAME, T2.RELATIONCODE, CRYPTSTRING.DECRYPT(T2.RESIDENTNO1,'BDS3018508125')AS RESIDENTNO1, CRYPTSTRING.DECRYPT(T2.RESIDENTNO2,'BDS3018508125')AS RESIDENTNO2, months_BETWEEN(TRUNC(SYSDATE,'YEAR'), TRUNC(TO_DATE( CASE WHEN SUBSTR( CRYPTSTRING.DECRYPT(T2.RESIDENTNO2,'BDS3018508125'), 1, 1) IN ('1','2','5','6') THEN '19'||CRYPTSTRING.DECRYPT(T2.RESIDENTNO1,'BDS3018508125') WHEN SUBSTR( CRYPTSTRING.DECRYPT(T2.RESIDENTNO2,'BDS3018508125'), 1, 1) IN ('3','4','7','8') THEN '20'||CRYPTSTRING.DECRYPT(T2.RESIDENTNO1,'BDS3018508125') END,'YYYYMMDD'),'YEAR')) / 12 + 1 AS AGE FROM P1_MASTER T1, P1_FAMILIES T2 WHERE T1.EMPNO = T2.EMPNO(+) and SERVICEKINDCODE = '1' AND T2.SCHOOLGUBN = '2' ) A where a.work_year >= 1 and a.age >= 7
RESIDENTNO1 컬럼에 NULL 값은 없으신가요?
SQL> ; 1 SELECT * 2 FROM ( 3 SELECT MONTHS_BETWEEN 4 (TRUNC(SYSDATE,'YEAR'), 5 TRUNC(TO_DATE('20'||null,'YYYYMMDD'),'YEAR' )) / 12 + 1 age 6 FROM DUAL 7 ) a 8* SQL> / TRUNC(TO_DATE('20'||null,'YYYYMMDD'),'YEAR' )) / 12 + 1 age * ERROR at line 5: ORA-01840: input value not long enough for date format