A컬럼은 DATE형입니다.
이 컬럼 안에는 2014-07-21 오전 5:18:28이라고 입력되어 있구요
그런데
SUBSTRING(A, 1, 6)이라고 조회를 하면
14/07/ 이라고 조회가 됩니다.
sqlplus로 조회를 하면
A컬럼이 14/03/10라고 조회되네요
이유가 있을까요?
실세 운영에 사용된 쿼리를 보면 SUBSTRING 결과가 201401 이라고 나온 값을
비교해서 이용하게끔 되어 있고 잘 돌아가고 있는데
결국 조회 될 때 무슨 옵션이 있는건가 싶기도 하구요
혹시 관련이 있을가 싶어서 사용 툴도 올립니다.
TOAD : 9.7.2.5 입니다.
날짜나 숫자 형식의 자료는 문자 자료와는 다르게
그 자료 자체로 특별한 의미를 가지고 있으며, 그 의미 그대로 해석됩니다.
Date 형에 들어간 자료는 날짜로써의 의미를 가지며
표현 방법은 여러가지입니다.
이 표현 방법은 각 사용자 환경에 따라 다르게 보입니다.
표현방법이 달라진다고 다른 자료는 아니죠. 같은 자료입니다.
문자열인 '201401' 과 비교하려면?
날짜형 자료를 문자열로 명확하게 포멧을 지정해서 변경해야 합니다.
WHERE TO_CHAR(컬럼, 'yyyymm') = '201401'
그러나, 이때 주의해야 할 사항은
컬럼을 가공하면 컬럼에 있는 인덱스를 활용 못하고
가공함수가 데이터 건수만큼 수행된다는 점이죠.
컬럼은 그대로 두고 조건값을 가공하여 비교한다면?
조건값 가공은 상수값에 대한 가공이므로 단 한번만 수행하면 되고
컬럼에 있는 인덱스도 정상적으로 이용할 수 있습니다.
WHERE 컬럼 >= TO_DATE('201401', 'yyyymm')
AND 컬럼 < ADD_MONTHS(TO_DATE('201401', 'yyyymm'), 1)