개발공작소
728x90

 

 

 

Postgres만 쓰다가 오라클을 쓰려고 하니 날짜관련 함수가 기억 안나서, 블로그에 정리해둔 게 있나 찾아보니

없어서 쓰는 오라클 날짜관련 함수 정리글..

 

참조문서 ( 오라클 튜토리얼 )

https://www.oracletutorial.com/oracle-date-functions/

 

Oracle Date Functions

This tutorial provides you with the most commonly used Oracle date functions that help you handle date and time data easily and more effectively.

www.oracletutorial.com

 

 

SYSDATE

 

시스템의 현재시간date타입으로 가져옴. postgresql과는 다르게 dual 테이블을 지정해줘야함.

 

기본문법

SELECT SYSDATE AS "현재일자" FROM dual;

--결과 ( date타입 )
--2022-07-04 20:32:11.000

 

 

SYSDATE의 문자열 타입 변환

 

SYSDATE는 기본적으로 date타입으로 현재시간을 리턴해주기 때문에, 이를

문자열로 변환하기 위해서는 TO_CHAR함수로 한번 묶어주어야 한다.

SELECT TO_CHAR(SYSDATE) AS "현재일자" FROM dual;

--결과 ( 문자열 타입 )
--22/07/04

 

 

이렇게 TO_CHAR으로 묶어주면 문자열타입이 되고, 결과값도 22/07/04로 조금 바뀌었다.

하지만 보통 사람들은 2022-07-04와 같은 포맷을 많이 쓰기 때문에, 포맷에 대해 알아보자.

 

 

 

- 자주 쓰이는 포맷

연도-월-일-시간-분-초 : YYYY-MM-DD-HH-MI-SS

연도-월-일 : YYYY-MM-DD

 

- 개별 포맷

  • YYYY : 네자리 년도 , 2020 , 2021 , 2022 ....
  • YY : 두자리 년도 . 20 , 21 ,22 ...
  • MM : 월 . 01 , 02 .. 12
  • DD : 일자 . 01 , 02 .. 31 
  • HH : 시간 . 01 , 02 .. 12
  • HH24 : 24시간 . 00, 02 ... 23
  • MI : 분 . 00 . 01 .. 59
  • SS : 초 . 00 , 01 .. 59

 

 

위의 자주 쓰이는 포맷은 진짜 그냥 자주 쓰이는 포맷이다. ( 내 기준.. )

상황에 따라 아래에 있는 개별 포맷을 조합하여 쓰면 된다. 그냥 나열만 해주면 됨...

 

 

--연/월/일만 SELECT
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') AS "현재일자" FROM DUAL;
--2022-07-04

--연/월/일/시간/분/초 SELECT
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD-HH-MI-SS') AS "현재일자" FROM DUAL;
-- 2022-07-04-20-15-46

 

 

아래는 자주 쓰이는 SYSDATE를 활용한 시간 구하는 쿼리문

 

 

오늘일자의 여러 포맷

--(1) 쿼리 실행된 날짜 → 2022-07-04
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') AS "현재일자" FROM DUAL;

--(2) 쿼리 실행된 날짜 → 22-07-04
SELECT TO_CHAR(SYSDATE,'YY-MM-DD') AS "현재일자" FROM DUAL;     

--(3) 쿼리 실행된 일시 → 2022-07-04 20:38:25
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS') AS "현재일자" FROM DUAL;     

--(4) 쿼리 실행된 24시간 일시 → 2022-07-04 20:40:30
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') AS "현재일자" FROM DUAL;

 

 

오늘일자의 

--(1) 쿼리 실행된 날짜         → 2022-07-04
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') AS "현재일자" FROM DUAL;

--(2) 쿼리 실행된 날짜 + 1일    → 2022-07-05
SELECT TO_CHAR(SYSDATE + 1 ,'YYYY-MM-DD') AS "계산된일자" FROM DUAL;

--(3) 쿼리 실행된 날짜 - 1일    → 2022-07-03
SELECT TO_CHAR(SYSDATE - 1 ,'YYYY-MM-DD') AS "계산된일자" FROM DUAL;

--(4) 쿼리 실행된 날짜 + 10일  → 2022-07-14
SELECT TO_CHAR(SYSDATE + 10 ,'YYYY-MM-DD') AS "계산된일자" FROM DUAL;

--(5) 쿼리 실행된 날짜 - 10일  → 2022-06-24
SELECT TO_CHAR(SYSDATE - 10 ,'YYYY-MM-DD') AS "계산된일자" FROM DUAL;

--(6) 쿼리 실행된 날짜 + 100일 → 2022-10-12
SELECT TO_CHAR(SYSDATE + 100 ,'YYYY-MM-DD') AS "계산된일자" FROM DUAL;   

--(7) 쿼리 실행된 날짜 - 100일 → 2022-03-26
SELECT TO_CHAR(SYSDATE - 100 ,'YYYY-MM-DD') AS "계산된일자" FROM DUAL;   

--(8) 날짜(2022-07-04) - 날짜(2022-07-09) → -5
SELECT 
	TO_DATE('2022-07-04','YYYY-MM-DD')  - TO_DATE('2022-07-09','YYYY-MM-DD') AS "계산된일자" 
    FROM DUAL;

 

 

--(1) 7개월 뒤 날짜 → 2023-02-04 20:50:35.000
SELECT ADD_MONTHS(SYSDATE,7) AS "계산된일자" FROM DUAL;

--(2) 4개월 전 날짜 → 2022-03-04 20:52:52.000
SELECT ADD_MONTHS(SYSDATE,-4) AS "계산된일자" FROM DUAL;

-- TO_CHAT함수를 이용하여 년도/월/일만 추출 → 2023-02-04
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,7),'YYYY-MM-DD') AS "계산된일자" FROM DUAL;

 

 

 

 

 

728x90
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!