DATE 타입은 결국 저장될때 number로 저장되나요? 0 4 1,956

by 김대식 [Oracle 기초] date number 형변환 [2017.06.22 03:40:31]


공부하다 생각해보니 sysdate -1 이라는 쿼리가 되잖아요?!

sysdate는 DATE타입이고 -1 은 NUMBER 인데 두개가 타입이 다른데 산술연산이 가능하다는건

어떻게 이루어 지는건가요?! 

저장할때 DATE타입이 NUMBER로 저장이 되어서 가능한 건가요?!

아니면 hiredate < '06-JUN-17' 이런식처럼자동 형변환이 되는건가요?

by 마농 [2017.06.22 07:17:23]

논리적 관점으로 보면 날짜형으로 저장된다고 보시면 됩니다.
물리적 관점으로 보면 2진코드로 저장되겠지요.
우리 눈에 보일때는 날짜형태(텍스트)로 보입니다.
보이는 형태는 시스템 설정에 따라 다르게 보입니다.
날짜 컬럼에 문자 조건을 주면 문자가 자동으로 날짜로 형변환 됩니다.
하지만 이 방법은 시스템마다 날짜 포멧 설정이 다르므로 오류 가능성이 많습니다.
조건 줄때는 아예 명시적으로 형변환을 해주셔야 합니다.
1. hiredate < TO_DATE('06-JUN-17', 'dd-mon-rr')  -- 한국어 설정에서는 에러납니다.
2. hiredate < TO_DATE('06-6월-17', 'dd-mon-rr')  -- 한국어 전용
3. hiredate < TO_DATE('06-JUN-17', 'dd-mon-rr', 'nls_date_language=american')  -- 언어설정까지 해주셔야 합니다.
4. hiredate < TO_DATE('20170606', 'yyyymmdd')  -- 가장 무난합니다.


by 김대식 [2017.06.25 01:11:04]

아직도 너무 어렵습니다 ㅠㅠㅠ


by jkson [2017.06.22 08:49:38]

산술연산은 어떻게 가능한가... 오라클 개발자가 연산 가능하게 만들어서.. 가 정답 아닐까요?^^;

date형 + 1 은 1일이 더해지게 만들어져 있지만

최초에 개발자가 시간단위로 더해지게 만들었다면 + 1은 1시간이 더해질 거고요.

sysdate + (interval '1' day) 를 줄여서 sysdate + 1로 표기 가능하게 했을 수도 있고요.


by 주킹 [2017.06.22 09:03:19]

Oracle은 자동 형변환을 내부적으로 해줘서 그렇고

다른 오픈소스DBMS의 경우 형변환을 해서 맞춰줘야 합니다.

(형변환이 되도록 안되도록 설계하는게 좋겠죠^^)

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