006. 날짜 함수 [SYSDATE / SYSTIMESTAMP]

IRISH·2024년 2월 27일
0

Oracle

목록 보기
8/17
post-thumbnail
  • 학습일자 : 2024.02.28

함수

⇒ SYSDTE

  • SYSDATE 함수를 사용하면 현재 일자와 시간(시스템기준)을 얻을 수 있다.
  • 최소단위 = 1초
SELECT TO_CHAR(SYSDATE,'RRRR-MM-DD HH24:MI:SS') "지금시간"
  FROM DUAL ; -- 2024-02-28 00:34:31
 
SELECT TO_CHAR(SYSDATE-1,'RRRR-MM-DD HH24:MI:SS') "하루전지금시간"
  FROM DUAL ; -- 2024-02-27 00:34:31
 
SELECT TO_CHAR(SYSDATE-1/24,'RRRR-MM-DD HH24:MI:SS') "1시간전시간"
  FROM DUAL ; -- 2024-02-27 23:34:59
 
SELECT TO_CHAR(SYSDATE-1/24/60,'RRRR-MM-DD HH24:MI:SS') "1분전시간"
  FROM DUAL ; -- 2024-02-28 00:36:26
 
SELECT TO_CHAR(SYSDATE-1/24/60/10,'RRRR-MM-DD HH24:MI:SS') "6초전시간"
  FROM DUAL ; -- 2024-02-28 00:37:34
 
SELECT TO_CHAR(SYSDATE-(5/24 + 30/24/60 + 10/24/60/60),'RRRR-MM-DD HH24:MI:SS') "5시간 30분 10초전"
  FROM DUAL ; -- 2024-02-27 19:07:35

⇒ SYSTIMESTAMP

  • SYSTIMESTAMP 함수를 사용하면 현재 일자와 시간(시스템기준)을 얻을 수 있다.
  • 최소단위 = 10억분의 1초 (10의 9승)
SELECT TO_CHAR(SYSTIMESTAMP,'RRRR-MM-DD HH24:MI:SS.FF3')  
  FROM DUAL ; -- 2024-02-28 00:39:52.119
 
SELECT TO_CHAR(SYSTIMESTAMP,'RRRR-MM-DD HH24:MI:SS.FF9')  
  FROM DUAL ; -- 2024-02-28 00:39:58.947000000
 
SELECT TO_CHAR(SYSTIMESTAMP -1/24,'RRRR-MM-DD HH24:MI:SS') "1시간전시간"
  FROM DUAL ; -- 2024-02-27 23:40:05
 
SELECT TO_CHAR(SYSTIMESTAMP -1/24/60,'RRRR-MM-DD HH24:MI:SS') "1분전시간"
  FROM DUAL ; -- 2024-02-28 00:39:12

⇒ ADD_MONTHS(a, b)

  • ADD_MONTHS 함수는 a의 날짜에 b의 달을 더한 값을 반환
-- SYSDATE를 이용한 예제
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,3),'RRRR-MM-DD')  "date"
  FROM DUAL; -- 2024-05-28
-- TIMESTAMP를 이용한 예제
SELECT TO_CHAR(ADD_MONTHS(SYSTIMESTAMP,3),'RRRR-MM-DD')  "date"
  FROM DUAL; --2024-05-28

⇒ MONTHS_BETWEEN(a1, a2)

  • MONTHS_BETWEEN은 a1과 a2 사이의 달의 수를 NUMBER형 타입으로 반환
-- 두 일자 사이에 달의 수를 조회하는 예제
SELECT MONTHS_BETWEEN(TO_DATE('2010-06-05','RRRR-MM-DD'), 
                      TO_DATE('2010-05-01','RRRR-MM-DD'))  "month"  
  FROM DUAL; -- 1.12903225806451612903225806451612903226
-- 두 일자 사이에 일짜 수를 조회하는 예제
SELECT TO_DATE('2010-06-05','RRRR-MM-DD') - TO_DATE('2010-05-01','RRRR-MM-DD') AS  "Day"  
  FROM DUAL; -- 35

⇒ ROUND(d[,F])

  • ROUND 함수는 F에 지정된 단위로 반올림 한다.
  • F가 연도라면 연도 단위로 반올림 한다.
  • F가 생략되면 날짜를 가장 가까운 날짜로 반올림한다.
SELECT TO_CHAR(ROUND(TO_DATE('2011-09-11 21:00:01',
                             'RRRR-MM-DD HH24:MI:SS'), 'YEAR'),
               'RRRR-MM-DD HH24:MI:SS') AS EX_ROUNT
  FROM DUAL
UNION ALL
SELECT TO_CHAR(ROUND(TO_DATE('2011-09-11 21:00:01',
                             'RRRR-MM-DD HH24:MI:SS'), 'MONTH'),
               'RRRR-MM-DD HH24:MI:SS')  AS EX_ROUNT
  FROM DUAL
UNION ALL 
SELECT TO_CHAR(ROUND(TO_DATE('2011-09-11 21:00:01',
                             'RRRR-MM-DD HH24:MI:SS'), 'DD'),
               'RRRR-MM-DD HH24:MI:SS')  AS EX_ROUNT
  FROM DUAL
UNION ALL 
SELECT TO_CHAR(ROUND(TO_DATE('2011-09-11 21:00:01',
                             'RRRR-MM-DD HH24:MI:SS')), 
               'RRRR-MM-DD HH24:MI:SS')  AS EX_ROUNT
  FROM DUAL;
-- 결과
--2012-01-01 00:00:00
--2011-09-01 00:00:00
--2011-09-12 00:00:00
--2011-09-12 00:00:00

⇒ 날짜에 대한 산술 연산

느낀점

최근에 SYSDATE에 대해서 공부를 했는데, 또 SYSDATE가 포함되어 있는 날짜 함수에 대해서 공부를 했다. 확실히 돈 만큼이나 시간도 중요한 만큼 시간 및 날짜 처리가 매우 중요한 것 같다. 그것을 ORACLE에서 실현하기 위해서는 연습만이 살 길일 것 같다.

profile
#Software Engineer #IRISH

0개의 댓글

관련 채용 정보