DB-날짜시간함수

NOOOOOOOOOOO·2023년 9월 30일

DB

목록 보기
12/25

1. 현재 날짜 및 시간

오라클이 설치된 서버 기준 시간

SELECT SYSDATE       -- DATE 형식
     , SYSTIMESTAMP  -- TIMESTAMP 형식
  FROM DUAL;

세션타임존 기준 시간

SELECT SESSIONTIMEZONE
     , CURRENT_DATE       -- DATE 형식
     , CURRENT_TIMESTAMP  -- TIMESTAMP 형식
  FROM DUAL;

2. 날짜를 원하는 형식으로 조회하기

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD')
     , TO_CHAR(SYSDATE, 'YYYY-MM-DD AM HH:MI:SS')
     , TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
     , TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3')  -- 밀리초(천분의 1초) 포함
  FROM DUAL;

-- 3. DATE 형식의 날짜 연산

--    1) 1일을 숫자 1로 처리한다.
--    2) 1=1일, 1/24=1시간, 1/24/60=1분, 1/24/60/60=1초
SELECT TO_CHAR(SYSDATE + 1,          'YYYY-MM-DD AM HH:MI:SS')  -- 1일 후
     , TO_CHAR(SYSDATE + 1/24,       'YYYY-MM-DD AM HH:MI:SS')  -- 1시간 후
     , TO_CHAR(SYSDATE + 1/24/60,    'YYYY-MM-DD AM HH:MI:SS')  -- 1분 후
     , TO_CHAR(SYSDATE + 1/24/60/60, 'YYYY-MM-DD AM HH:MI:SS')  -- 1초 후
  FROM DUAL;

SELECT SYSDATE - TO_DATE('23/07/01', 'YY/MM/DD')
     , TRUNC(SYSDATE - TO_DATE('23/07/01', 'YY/MM/DD'))  -- 경과한 일수
  FROM DUAL;

4. TIMESTAMP 형식의 날짜 연산

--    1) INTERVAL 키워드를 이용한다.
--    2) YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 단위를 사용한다.
SELECT SYSTIMESTAMP + INTERVAL '1' YEAR   -- 1년 후
     , SYSTIMESTAMP + INTERVAL '1' MONTH  -- 1개월 후
     , SYSTIMESTAMP + INTERVAL '1' DAY    -- 1일 후
     , SYSTIMESTAMP + INTERVAL '1' HOUR   -- 1시간 후
     , SYSTIMESTAMP + INTERVAL '1' MINUTE -- 1분 후
     , SYSTIMESTAMP + INTERVAL '1' SECOND -- 1초 후
  FROM DUAL;

SELECT SYSTIMESTAMP - TO_TIMESTAMP('23/07/01', 'YY/MM/DD')  -- 경과한 기간이 TIMESTAMP 형식으로 반환
     , EXTRACT(DAY FROM SYSTIMESTAMP - TO_TIMESTAMP('23/07/01', 'YY/MM/DD'))  -- 경과한 기간에서 일수를 추출
  FROM DUAL;

5. 필요한 단위 추출하기

SELECT EXTRACT(YEAR FROM SYSDATE)   -- 년
     , EXTRACT(MONTH FROM SYSDATE)  -- 월
     , EXTRACT(DAY FROM SYSDATE)    -- 일
     , EXTRACT(HOUR FROM SYSTIMESTAMP)   -- 시, UTC(표준시) 기준
     , EXTRACT(HOUR FROM SYSTIMESTAMP)+9 -- 시, Asia/Seoul 기준
     , EXTRACT(MINUTE FROM SYSTIMESTAMP) -- 분
     , EXTRACT(SECOND FROM SYSTIMESTAMP) -- 초
     , TRUNC(EXTRACT(SECOND FROM SYSTIMESTAMP))
     , TO_CHAR(SYSDATE, 'YYYY')  -- TO_CHAR 함수를 추출용도로 사용
  FROM DUAL;

6. 요일을 기준으로 특정 날짜 구하기

SELECT NEXT_DAY(SYSDATE, '수')   -- 다음 수요일
     , NEXT_DAY(SYSDATE-8, '수') -- 이전 수요일(SYSDATE-7이 아님을 주의)
  FROM DUAL;

7. N개월 전후 날짜 구하기

SELECT ADD_MONTHS(SYSDATE, 1)   -- 1개월 후
     , ADD_MONTHS(SYSDATE, -1)  -- 1개월 전
     , ADD_MONTHS(SYSDATE, 5 * 12)  -- 5년 후
  FROM DUAL;

8. 경과한 개월 수 구하기

SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('23/01/01', 'YY/MM/DD'))
  FROM DUAL;

0개의 댓글