본문 바로가기
Oracle SQL

날짜 함수

by Nowkeeh Ahc

 오라클에서 날짜 데이터는 숫자처럼 계산된다. 출력 형식은 시스템의 환경에 따라 달라질 수 있지만, 오라클의 기본 형식은 ‘YY/MM/DD’이며, 내부적으로는 날짜를 ///::(YYYY/MM/DD:HH24:MI:SS)’로 저장하게 된다. 오라클에서 사용하는 날짜와 시간 출력 형식은 다음과 같다.

날짜 형식 의미
YYYY 또는 YY 년도를 표시한다.
MM 월을 숫자로 표시한다.
MON 월을 알파벳으로 표시한다.
DAY 또는 DY 요일을 표시한다.
DD 일을 숫자로 표시한다.
시간 형식 의미
AM(A.M) 또는 PM(P.M) 오전, 오후 시각을 표시한다.
HH 또는 HH12 시간(1~12)을 표시한다.
HH24 시간을 24시간으로 표시한다.
MI 분을 표시한다.
SS 초를 표시한다.

 

현재 날짜 출력

ex. 현재 날짜와 시간을 출력하여라.

SELECT SYSDATE
FROM dual;

 

날짜 추출

EXTRACT 함수는 인자로 입력된 날짜정보로부터 지정된 날짜 유형을 추출하여 반환하는 함수이다. 기본 문법은 다음과 같다.

EXTRACT([year/month/day/hour/minute/second] … from datetime)

ex. 현재 날짜로부터 다양한 날짜 유형을 출력해라.

SELECT EXTRACT (YEAR FROM SYSDATE) AS YY,
       EXTRACT (MONTH FROM SYSDATE) AS MM,
       EXTRACT (DAY FROM SYSDATE) AS DD,
       EXTRACT (HOUR FROM SYSTIMESTAMP) AS HH,
       EXTRACT (MINUTE FROM SYSTIMESTAMP) AS MM_1,
       EXTRACT (SECOND FROM SYSTIMESTAMP) AS SS
FROM dual;

 

날짜 연산

함수 기능
ROUND(날짜, 형식) 형식에 따라 반올림한 날짜를 반환한다.
TRUNC(날짜, 형식) 형식에 따라 버림한 날짜를 반환한다.
MONTHS_BETWEEN(날짜, 날짜) 두 날짜의 개월 수를 계산한다.
ADD_MONTHS(날짜, n) 날짜에 n개월을 더한 날짜를 계산한다.

 

(1) ROUND 함수

ROUND 함수는 날짜 데이터를 지정된 형식에 맞추어 반올림한다. 가령, 상기 함수식에 형식을 연도 ’YYYY’를 지정했으면 월과 일을 반올림 처리하여 표시하게 된다.

ex. 현재 날짜에서 연도별, 월별, 일별로 반올림하여 출력하여라.

SELECT ROUND(sysdate, 'YYYY'),
       ROUND(sysdate, 'MM'),
       ROUND(sysdate, 'DD')
FROM dual;

 

(2) TRUNC 함수         

TRUNC 함수는 날짜 데이터를 지정된 형식에 맞추어 버림한다. 

ex. 현재 날짜에서 연도별, 월별, 일별로 버림하여 출력하여라

SELECT TRUNC(sysdate, 'YY'),
       TRUNC(sysdate, 'MM'),
       TRUNC(sysdate, 'DD')
FROM dual;

 

(3) MONTHS_BETWEEN 함수

MONTHS_BETWEEN 함수는 두 날짜 사이의 개월 수를 계산하는 함수이다.

MONTHS_BETWEEN(날짜1, 날짜2)

ex. 2015521부터 2019320일까지의 개월 수를 계산하여라. , 소수 첫째 자리에서 반올림하여 출력하여라.

SELECT ROUND(MONTHS_BETWEEN('2019-03-20', '2015-05-21')) as 쿼리결과
FROM dual;

 

(4) ADD_MONTHS 함수

ADD_MONTHS 함수는 날짜에 n개월을 더한 날짜를 계산한다.

ADD_MONTHS(날짜, n)    *n=더할 개월, 음수로 뺄 수도 있다.

ex. 고객ID‘C0001’인 고객이 첫 구매를 한 날에 30개월의 유료 멤버십을 가입했다고 하였을 때, 이 고객의 멤버십 계약이 종료되는 날짜를 구하여라.

SELECT 고객ID, ADD_MONTHS(MIN(구매일) , 30)
FROM 구매
WHERE 고객ID = 'C0001'
GROUP BY 고객ID;

 

(5) 기타 연산

 DATE형의 컬럼 두개를 빼면 몇일 차이가 나는지 알 수 있다. 만약 날짜를 dual을 사용해서 수기로 작성한 후 뺄 경우에는 TO_DATE(7.4데이터 변환 함수)로 DATE형태의 데이터라는 것을 명시해줘야 한다.

ex. 오늘을 기준으로 내일 날짜, 이번달의 마지막 날짜 그리고 2015년 10월 21일로부터 며칠이 지났는지 구하시오.

SELECT SYSDATE+1 AS 내일날짜, LAST_DAY(SYSDATE) AS 이번달마지막날짜,
TO_DATE(SYSDATE)-TO_DATE('2015-10-21') AS 지난일수
FROM dual;

 


This post was written based on what I read and studied the book below.

http://www.yes24.com/Product/Goods/99002458

댓글