날짜 조회 TO_CHAR질문 0 2 1,386

by 세탁건조기 [Oracle 기초] [2017.04.13 10:27:41]


로그테이블에서 날짜로 조회하는데 이상한 점을 발견해서 질문드려요

로그테이블에 LOG_DATE 컬럼 에는 '20170412' 인 데이터가 있는상태이고 날짜가 20170412와 같거나 작은 행을 검색하려합니다.

 

프로시저에서 1번쿼리와 같이 조회를 하는데요.

1번쿼리와 같이 조회하면 조회가안되고 2번 쿼리처럼 그냥 <=20170412 로 조회하면 조회가 됩니다...

차이가 뭔지 알수 있을까요...?

 

 select TO_DATE('20170413','YYYYMMDD') - 1 from dual;   찍어보니 결과는 똑같이 '20170412' 나왔습니다 ㅠ

 

 

1번 쿼리

select * from 로그테이블
           WHERE LOG_DATE <=  TO_CHAR(TO_DATE('20170413','YYYYMMDD') -1, 'YYYYMMDD');
 

2번 쿼리

  select * from 로그테이블
           WHERE LOG_DATE <=  '20170412';

 

로그테이블의 LOG_DATE 컬럼은 CHAR(14) 타입입니다.

 

by 마농 [2017.04.13 10:45:23]

CHAR 타입은 공백이 뒤에 붙어서 그렇습니다.
상수값으로 조건 주면 공백 감안해서 비교해 줍니다.
계산식으로 비교하면 공백 신경 안쓰고 비교합니다.
계산식에 RPAD 를 추가해서 공백을 채워주세요.


CHAR(14)면 애초에 시분초까지 저장할 생각으로 만든 컴럼 같네요.
요즘은 고정이든 가변이든 상관 없이 VARCHAR2 사용합니다.


by 세탁건조기 [2017.04.13 11:07:50]

답변감사합니다. 공백을 감안해서 비교한다는 것은 처음알았네요 큰 도움이 되었습니다!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입