[Oracle] 날짜 데이터 비교 TO_DATE BETWEEN AND, Timestamp 함수. JSP 날짜 검색 기능 개발 중 오류
by m_.9m2022. 6. 14.
🔥 에러문
00913. 00000 - "too many values" select
01830. 00000 - "date format picture ends before converting entire input string"
ORA-01861: literal does not match format string
ORA-01810-format-code-appears-twice
해결방법:
🔥 해결 아이디어
1) 날짜 검색 기능을 구현하는 방법은 대소 비교와 함수(To date) 등을 사용하는 것이다.
이때 to_date 함수는 사용하는 형식을 엄격하게 지켜줘야하는 경우가 많아서 형식에 관련한 많은 오류가 뜰 수 있다.
2) 날짜 형식에 관한 설정은 데이터 베이스 내에서 각자 설정해줄 수있다. 내 형식이 어떻게 되어있는지를 확인하고 수정해야한다.
3) 반대로 생각해보면 각자의 홈페이지 내에서 날짜 기능에 SQL Injection 등을 수행할 시 설정이 다르기때문에 SQL Injection이 어렵다고 느껴질 수있는데 날짜 형식만 검색해도 뒤에 시분초는 알아서 세팅된다던지 하기때문에 생각보다 실제 공격시에는 까다롭지 않다고 한다.
insert into date_timestamp values(sysdate, sysdate);
[date 타입 함수 설정 수정]
alter session set nls_date_format='YYYY-MM-DD HH:MI:SS';
[수정 값 조회]
select * from date_timestamp;
[timestamp 타입 함수 설정 수정]
alter session set nls_timestamp_format='YYYY-MM-DD HH24:MI:SS.FF6';
[수정 값 조회]
select * from date_timestamp;
[저장!!!!!!!!!!!!!!!!!]
COMMIT;
🔥 해결
>>쿼리 테스트에 성공
select * FROM BBS WHERE bbsdate between to_date('2022-04-05 23:59:59', 'YYYY-MM-DD HH24:MI:SS') and to_date('2022-06-25 23:59:59', 'YYYY-MM-DD HH24:MI:SS') AND BBSTITLE like '%t%';