Programming/SQL

날짜 함수. 2021-08-02

최동훈1 2021. 8. 2. 16:14

저번부터 궁금했던 것이, 오라클의 DATE형 변수에는 도대체 무슨 함수로 값을 입력해야 하나? 라는 의문이 있었는데,

만약 오라클 자체의 시간으로 입력할려면, SYSDATE 함수를 쓰고, 오라클 DBMS 에 접속한 현지시간을 쓸려면, CURRENT_DATE 를 쓰면 된다. 한번 해보자.

INSERT into member(ID,NAME,regdate) values('LG CNS', '최동훈', sysdate);

이 쿼리를 쓰니 된다. !! 그 전에는 무슨 함수를 써야 DATE타입에 값을 넣을수 있는지 몰랐는데, 이제서야 알게됬다.

들어갔다. !! 

그런데 난 분명 sysdate 는 년/월/일 뿐만 아니라 시 분 초 까지 다 입력되는것으로 알고 있는데 이런 형식으로 REGDATE 필드(칼럼)값을 보이게 할려면 어떻게 해야 할까? 바로 포맷을 조정하면 된다.

 

잘못 이해했다. 다시 설명한다. 일단 SQL에서 날짜함수는 크게 두 가지 기준에 따른 부분으로 나뉜다.

첫번째는 "시간" 의 기준이 되는 장소이다.

바로 "오라클 서버 위치 기준(현재시간)" / "사용자 세션별 지정한 시간 기준" 이다. 이 두게는 각 각 sys 와 current 로 나뉜다.

두번째는 "나타내는 시간의 범위" 이다.

시/분/초 까지의 단위와, 밀리세컨드 까지의 단위 를 나타낸다. 각각 순서대로 date 와 timestamp로 나뉜다.

 

예를 들자면, sysdate는 "오라클 서버가 위치한 곳 기준 시/분/초 까지 나타내고, systimestamp는 "오라클 서버가 위치한 곳 기준 밀리세컨드 단위까지 나타내는 것이다.

 

select sysdate,systimestamp from dual;

이 쿼리를 실행해보면 date 와 timestamp의 차이를 알 수 있다.

두 함수의 차이- 바로 나타낼수 있는 시간의 단위이다.

다시 본론으로 돌아가서 그럼 이쁘게 sysdate만 써서 시/분/초 까지 나타내는 포맷을 지정할려면 어떻게 해야 할까?

 

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

이렇게 NLS(national language support) 라는 오라클에서 각 지역별로 날짜 표기법이 다르니 설정을 통해 바꿀수 있는 기능을 제공한다. 

이렇게 바뀌었다.

 

그럼, 우리가 입력한 DATE타입에서 문자열이 아니니 월/일 등을 뽑아내려면 어떻게 해야할까? 문자열이 아니니 SUBSTR 함수를 쓰지 못할 것이다. 바로 EXTRACT 라는 DATE 타입에서 월/일 만 뽑아낼수 있는 함수를 쓰면 된다.

select EXTRACT(MONTH FROM MEMBER) FROM MEMBER;

이렇게 한다면 원하는 월 만 추출 가능 하다.

 

공부시간 2시간.

순공시간 1시간.

 

오늘은 오후에 병원 다녀오느라 공부를 많이 못한거 같다.. 내일 조금더 분발해야 겠다.