web developer

[sql/oracle] TO_DATE, TO_CHAR 비교 / 오류 원인(ORA-10858, ORA-01481) 본문

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