본문 바로가기
DB/Oracle

내장함수_ 날짜

by so_o 2021. 7. 1.
1. 문자열 함수
2. 숫자 함수
3. 날짜 함수
4. 변환 함수
5. NULL 관련 함수
6. 집계 함수

 


3. 날짜 함수

1) SYSDATE,  SYSTIMESTAMP
   => ORACLE 서버가 설치되어 있는 곳에서의 시간

2) CURRENT, CURRENT_TIMESTAMP
   => 세션 설정에 따른 시간

   * TIMESTAMP : 시, 분, 초 보다 더 구체적인 시간을 알 수 있음

3) EXTRACT 
   => 원하는 날짜만 추출하는 함수

4) ADD_MONTH
   => 특정 날짜를 추가하는 함수

5) MONTHS_BETWEEN(날짜, 날짜)
   => 두 날짜 개월의 차이

6) NEXT_DAY(현재 날짜, 다음 요일)
   => 다음 요일을 알려주는 함수

7) LAST_DAY(날짜)
   => 월의 마지막 일자를 알려주는 함수

8) ROUND(날짜, 포멧), TRUNC(날짜, 포멧)
   => 날짜를 반올림하는 함수, 날짜를 자르는 함수

 

 

세션 시간과 포맷 변경

   NLS_DATE_DATE_FORMAT

ALTER SESSION SET TIME_ZONE = '-1:0'

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

 

 

 

EXTRACT

=> 특정 날짜 추출 함수

SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;
SELECT EXTRACT(MINUTE FROM SYSDATE) FROM DUAL;
SELECT EXTRACT(SECOND FROM SYSDATE) FROM DUAL;

 

<예제>

가입 회원 중에서 비수기(2, 3, 11, 12)월 달에 가입한 회원을 조회하기

SELECT * FROM MEMBER WHERE EXTRACT (MONTH FROM REGDATE) IN(2, 3, 11, 12);

 

 

 

ADD_MONTH(날짜, 정수)
SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL;

 

SELECT ADD_MONTHS(SYSDATE, 1) FROM DUAL;

 

<예제>

가입한 회원 중에서 가입한지 6개월이 안되는 회원을 조회하기

SELECT * FROM MEMBER WHERE ADD_MONTH(SYSDATE, -6) < REGDATE  ;
-- 6개월이 안된 회원 출력

SELECT * FROM MEMBER WHERE ADD_MONTH(SYSDATE, -6) >= REGDATE  ;
-- 6개월이 넘은 회원 출력

 

 

 

MONTHS_BETWEEN(날짜, 날짜)

=> 날짜 차이를 알아내는 함수

SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2021-07-01') FROM DUAL;

 

<예제>

가입한 회원 중에서 가입한지 6개월이 안되는 회원 조회하기

SELECT * FROM MEMBER WHERE MONTHS_BETWEEN(SYSDATE, REGDATE) < 6;

 

 

 

NEXT_DAY(현재날짜, 다음요일)
SELECT NEXT_DAY(SYSDATE, '토요일') FROM DUAL;
-- 또는
SELECT NEXT_DAY(SYSDATE, '토') FROM DUAL;
-- 또는
SELECT NEXT_DAY(SYSDATE, 7) FROM DUAL;

   => 돌아오는 다음 토요일의 날짜를 출려해준다.

 

 

 

LAST_DAY(날짜)
SELECT LAST_DAY(SYSDATE) FROM DUAL;

 

<예제>

SELECT LAST_DAY(ADD_MONTHA(SYSDATE, 3)) FROM DUAL;

=> 오늘 날짜로부터 3개월 후의 마지막 날짜를 알 수 있다.

 

 

 

ROUND, TRUNC(날짜, 포멧)
 SELECT ROUND(SYSDATE, 'CC'), TRUNC(SYSDATE, 'CC') FROM DUAL;
 -- 몇 세기 = CC
 
 SELECT ROUND(SYSDATE, 'YEAR'), TRUNC(SYSDATE, 'YEAR') FROM DUAL;
 
 SELECT ROUND(SYSDATE, 'Q'), TRUND(SYSDATE, 'Q') FROM DUAL;
 
 SELECT ROUND(SYSDATE, 'MONTH'), TRUNC(SYSDATE, 'MONTH') FROM DUAL;
 
 SELECT ROUND(SYSDATE, '2'), TRUND(SYSDATE, 'W') FROM DUAL;
 
 SELECT ROUND(SYSDATE, 'DAY'), TRUNC(SYSDATE, 'DAY') FROM DUAL;
 
 SELECT ROUND(SYSDATE, 'D'), TRUND(SYSDATE, 'D') FROM DUAL;
 
 SELECT ROUND(SYSDATE, 'HH'), TRUND(SYSDATE, 'HH') FROM DUAL;
 
 SELECT ROUND(SYSDATE, 'MI'), TRUND(SYSDATE, 'MI') FROM DUAL;

 

 

 

 

 

 

 

 

'DB > Oracle' 카테고리의 다른 글

내장함수_ 숫자  (0) 2021.07.01
내장 함수_ 문자열  (0) 2021.06.29
중복 값 제거 (DISTINT)  (0) 2021.06.29
ROWNUM  (0) 2021.06.29
정규식  (0) 2021.06.29