SQL/Oracle SQL
[sql/oracle] TO_DATE, TO_CHAR 비교 / 오류 원인(ORA-10858, ORA-01481)
trueman
2022. 3. 4. 15:48
728x90
728x90
TO_DATE (date/날짜 비교) : 문자형(String) → 날짜형(date)
TO_DATE('2017-05-12 23:59:59', 'YYYY-MM-DD')
TO_DATE('2017-05-12 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
SELECT DUMMY
FROM DUAL
WHERE SYSDATE > TO_DATE('20190731', 'YYYYMMDD');
* TO_DATE() 사용시 포멧('yyyymmdd')이 지정되지 않아서 오류 발생
TO_CHAR (string/날짜 비교) : 날짜형(date) → 문자형(String)
TO_CHAR(SYSDATE, 'YYYY-MM-DD')
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
SELECT DUMMY
FROM DUAL
WHERE '20190731' > TO_CHAR(SYSDATE, 'YYYYMMDD');
ORA-10858 a non-numeric chracter was found where a numeric as expected
SELECT TO_DATE(SYSDATE, 'YYYYMMDD') FROM DUAL;
SYSDATE는 이미 DATE 타입의 값인데 해당 값을 다시 TO_DATE()를 사용하여 DATE 타입으로 변환을 시도했기 때문에 발생한다.
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL;
Foramt을 변경하려면, Date 타입의 값을 TO_CHAR()을 사용하여 변경하면 된다.
ORA-01481 invalid number format model : 숫자 형식 모델이 부적합합니다
SELECT TO_CHAR('20210705', 'YYYYMMDD') FROM DUAL;
해당 오류는 문자열의 일자를 TO_CHAR()을 사용하여 format을 지정하려고 했기 때문에 발생한다.
SELECT TO_DATE('20210705', 'YYYYMMDD') FROM DUAL;
TO_DATE()를 사용하면 된다.
출처 : https://devfunny.tistory.com/449
출처: https://granya.tistory.com/37
728x90
728x90