본문 바로가기
DBMS/ORACLE

[ORACLE]오라클_날짜함수(SYSDATE)

by 썸머워즈 2019. 2. 11.
반응형

SYSDATE

  • 현재 날짜와 시간을 시스템 기준으로 얻어온다. (최소단위 1초)
  • 얻어온 숫자에 연산이 가능하다.
  • TO_CHAR : 숫자나 날짜를 문자형식으로 변환 해준다.
  • TO_DATE : 숫자나 문자형식을 날짜형식으로 변환 해준다.
  • 날짜를 넣어줄때는 TO_DATE 형식으로 하고 그 날짜를 조회할때는 TO_CHAR 형식으로 출력한다.

SYSDATE는 정말 자주 사용하는 날짜함수이다.

사용법은 매우 간단하다.

 

▷ 구문

SELECT SYSDATE FROM dual;

예제 1) SYSDATE와 TO_CHAR 사용

SELECT TO_DATE(SYSDATE, 'yyyy mm dd') AS "현재시간"  FROM DUAL;

SELECT TO_CHAR(SYSDATE, 'RRRR-MM-DD HH24:MI:SS') AS "현재시간"  FROM DUAL;

-- 1일 전
SELECT TO_CHAR(SYSDATE-1, 'RRRR-MM-DD HH24:MI:SS') AS "현재시간"  FROM DUAL;

-- 1시간 전
SELECT TO_CHAR(SYSDATE-1/24, 'RRRR-MM-DD HH24:MI:SS') AS "현재시간"  FROM DUAL;

-- 1분 전
SELECT TO_CHAR(SYSDATE-1/24/60, 'RRRR-MM-DD HH24:MI:SS') AS "현재시간"  FROM DUAL;

-- 1초 전
SELECT TO_CHAR(SYSDATE-1/24/60/60, 'RRRR-MM-DD HH24:MI:SS') AS "현재시간"  FROM DUAL;

-- 5시간 30분 10초 전
SELECT TO_CHAR(SYSDATE-(5/24+30/24/60+10/24/60/60), 'RRRR-MM-DD HH24:MI:SS') AS "현재시간"  FROM DUAL;

-- ADD_MONTHS(a,b) a 날짜에 b 달을 더한 값을 반환
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,4),'RRRR-MM-DD') AS "MONTH" FROM DUAL;

-- b에 음수가 들어가면 빼준다.
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-4),'RRRR-MM-DD') AS "MONTH" FROM DUAL;
SELECT TO_CHAR(ADD_MONTHS(SYSTIMESTAMP,4),'RRRR-MM-DD') AS "MONTH" FROM DUAL;

-- 4) MONTHS_BETWEEN(day1, day2) : day1 과 day2 사이의 달수를 NUMBER 타입으로 반환한다.
SELECT MONTHS_BETWEEN(TO_DATE('2017-11-10','YYYY-MM-DD'), TO_DATE('2017-09-12','YYYY-MM-DD'))
AS "month" FROM DUAL;

-- 일(day) 구하기 ★★★
SELECT TO_DATE('2017-11-10','YYYY-MM-DD') - TO_DATE('2017-09-12','YYYY-MM-DD')
AS "day" FROM DUAL;

-- LAST_DAY(m) : 지정한 달의 마지막 날짜 가져오기 앞에 항상 다른 컬럼과 같이 사용해야함
SELECT SYSDATE TODAY,LAST_DAY(SYSDATE) AS "lastDay" FROM DUAL;

테이블을 생성할 때 DEFAULT SYSDATE로 제약조건을 설정하면 해당 컬럼을 입력할 때 입력된 날짜로 자동 기록된다.

자신이 원하는 구조로 응용하여 해당 날짜를 가져와 사용하면된다.

 

위 예제를 보면 다양하게 가져올 수 있는데,

여기서 YYYY와 RRRR의 차이가 궁금할 수 있다.

 

둘다 DATE로 부터 TO_CHAR를 이용해 년도를 뽑을때는 동일한 4자리로 뽑히며, 문자열로부터 TO_DATE 역시 동일하다.

 

둘의 차이는 2자리로 설정할 경우 발생한다.

이 때는 TO_CHAR를 이용할 때는 동일하지만, TO_DATE를 이용할 때 서로 다른 값을 출력한다.

  • yy(00~99) : 2000년대(21세기, 현재 세기)
  • yy(00~49) : 2000년대(21세기, 현재 세기)
  • yy(50~99) : 1900년대(20세기, 직전 세기)

예를 들자면 다음과 같다.

SELECT TO_DATE('00.01' , 'yy.mm')  : 2000.01
SELECT TO_DATE('59.01' , 'yy.mm')  : 2059.01
SELECT TO_DATE('00.01' , 'yy.mm')  : 2000.01
SELECT TO_DATE('80.01' , 'yy.mm')  : 1980.01

이런식으로 결과가 도출된다.

 

여담이지만 요즘에는 날짜 컬럼에 DATE 타입의 데이터 보다는 문자형식의 날짜로 등록하는 경우가 많다.

반응형


댓글

TOP