본문 바로가기
개발/JSP

[Oracle] 날짜 데이터 비교 TO_DATE BETWEEN AND, Timestamp 함수. JSP 날짜 검색 기능 개발 중 오류

by m_.9m 2022. 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이 어렵다고 느껴질 수있는데 날짜 형식만 검색해도 뒤에 시분초는 알아서 세팅된다던지 하기때문에 생각보다 실제 공격시에는 까다롭지 않다고 한다.

 

🔥 해결 방안

 

2) 부분을 맞춰주기 위해 

date와 timestamp를 형식을 조회 후 수정해준다.

 

[형식을 조회하기 위한 테이블 생성]

create table date_timestamp(  
  date1 date,
  date2 timestamp
);

 

[조회를 위해 값을 삽입]
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%';