반응형
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 타입의 데이터 보다는 문자형식의 날짜로 등록하는 경우가 많다.
반응형
댓글