date 형을 substring했을 때 0 3 8,209

by 가을에사랑 date substring [2014.07.21 14:42:43]


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 입니다.

by 약쟁이총각 [2014.07.21 15:19:23]

select substr(sysdate,1,6) from dual

21-JUL <--- 결과

즉 6자리만 나오네요..(전 툴을 xdba를 썼어요..)

원하는 결과를 내려면 select to_char(sysdate,'yyyymm') from dual


by 아발란체 [2014.07.21 15:33:09]

약쟁이님 말씀처럼 TO_CHAR(SYSDATE, 'YYYY-MM-DD') 식으로 변경 후 SUBSTR 해야 합니다.

SYSDATE 반환 값은 오라클 설정에 따라 값 형식이 달라 질 수 있습니다.

 


by 마농 [2014.07.21 15:54:11]

날짜나 숫자 형식의 자료는 문자 자료와는 다르게
그 자료 자체로 특별한 의미를 가지고 있으며, 그 의미 그대로 해석됩니다.
Date 형에 들어간 자료는 날짜로써의 의미를 가지며
표현 방법은 여러가지입니다.
이 표현 방법은 각 사용자 환경에 따라 다르게 보입니다.
표현방법이 달라진다고 다른 자료는 아니죠. 같은 자료입니다.
문자열인 '201401' 과 비교하려면?
날짜형 자료를 문자열로 명확하게 포멧을 지정해서 변경해야 합니다.
 WHERE TO_CHAR(컬럼, 'yyyymm') = '201401'
그러나, 이때 주의해야 할 사항은
컬럼을 가공하면 컬럼에 있는 인덱스를 활용 못하고
가공함수가 데이터 건수만큼 수행된다는 점이죠.
컬럼은 그대로 두고 조건값을 가공하여 비교한다면?
조건값 가공은 상수값에 대한 가공이므로 단 한번만 수행하면 되고
컬럼에 있는 인덱스도 정상적으로 이용할 수 있습니다.
 WHERE 컬럼 >= TO_DATE('201401', 'yyyymm')
   AND 컬럼 <  ADD_MONTHS(TO_DATE('201401', 'yyyymm'), 1)

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