개발군싹

[ORACLE DATABASE] 날짜 처리 함수 본문

DB

[ORACLE DATABASE] 날짜 처리 함수

개발자군싹 2023. 10. 15. 15:37

ORACLE DATABASE

날짜 처리 함수

오라클에서 날짜를 출력하는 두가지 방식이 있다.

1) SYSDATE(년,월,일) ➡️ DATE 타입

2) SYSTIMESTAMP(년,월,일,시,분,초) ➡️ TIMESTAMP 타입

 

SELECT SYSDATE, SYSTIMESTAMP
FROM DUAL;

SYSDATE, SYSTIMESTAMP 함수 결과

날짜 산술연산처리

날짜에 +,- 연산을 이용하여 일수를 증가하거나 차감하여 출력할 수 있다. 

+,- 연산을 사용하여 원하는 날짜의 값을 출력할 수 있다.

-- 날짜 산술연산처리하기
-- +,- 연산하기 -> 일수가 증가 또는 차감
SELECT SYSDATE, SYSDATE-1, SYSDATE-20, SYSDATE-30, SYSDATE+20
FROM DUAL;

+,- 연산을 이용하여 원하는 날짜의 값을 출력한 결과

LAST_DAY()

LAST_DAY() 함수를 이용하여 해당 달의 마지막날이 몇일인지 알아 볼 수 있다.

-- LAST-DAY : 그 달의 마지막날을 출력해주는 함수
SELECT LAST_DAY(SYSDATE)
FROM DUAL;

23년 10월의 마지막 날짜는 '31'일

ADD_MONTHS(날짜, 개월 수 )

-- ADD_MONTHS : 개월수를 더하는 함수
SELECT SYSDATE, ADD_MONTHS(SYSDATE,4)
FROM DUAL;

ADD_MONTHS()를 이용하여 4개월 뒤 날짜를 출력

➡️ 21개월 군복무기간동안 먹어야할 짬밥수와 전역일을 출력해보자. (현재 날짜 기준)

-- 군복무 기준 개월은 내가 근무했던 21개월을 기준으로... 짭밥수는 하루에 3끼를 기준으로...
SELECT ADD_MONTHS(SYSDATE,21) AS 전역일 , ABS(SYSDATE-ADD_MONTHS(SYSDATE,21))*3 AS 짬밥수
FROM DUAL;

생각하기 싫군...

MONTHS_BETWEEN(날짜1, 날짜2)

두 날짜 사이의 개월 수 차이를 출력해주는 함수

날짜1에서 날짜2을 뺀 개월수를 출력한다. 소수점 자릿수까지 출력되어 해당 출력 결과를 프로그래밍 구현에 맞게 사용할 줄 알아야 할 것 같다.

-- MONTHS_BETWEEN : 두개의 날짜를 받아서 개월수를 구해주는 함수
SELECT FLOOR(MONTHS_BETWEEN('24/02/01',SYSDATE)) || '개월'
FROM DUAL;

EXTRACT(YEAR||MONTH||DAY FROM 날짜)

-- 날짜의 년, 월, 일을 따로 출력할 수 있는 함수 제공
-- EXTRACT(YEAR||MONTH||DAY FROM 날짜) 숫자값을 반환
-- 현재날짜의 연,원,일 출력하기
SELECT EXTRACT(YEAR FROM SYSDATE), EXTRACT(MONTH FROM SYSDATE), EXTRACT(DAY FROM SYSDATE)
FROM DUAL;

EXTRACT 함수를 이용하여 입력한 날짜 데이터에서 원하는 '년,월,일'만 뽑아낼 수 있다.

이는 나이 계산, 년도 기준 등 어떠한 기준과 나이를 계산하거나 할 때 사용할 수 있음으로 다양한 사용 예제를 실습해봐야겠다.

➡️ 사원 중 년도에 상관없이 12월에 입사한 사원의 정보를 출력하라.

-- 사원 중 12월에 입사한 사원의 이름, 입사일 조회하기
SELECT EMP_NAME, HIRE_DATE
FROM EMPLOYEE
WHERE EXTRACT(MONTH FROM HIRE_DATE) = '12';

년도의 상관없이 12월에 입사한 직원의 결과를 출력

➡️ 날짜 처리 함수에서 년도의 패턴 표시를 'Y' 말고 'R'로 가능한데 'R'표기 했을 때는 아래와 같은 조건을 잘 생각해서 쿼리문을 작성해야한다.

-- RR로 년도를 출력할때 
--현재년도       입력년도     계산년도
--00~49         00~49       현세기
--00~49         50~99       전세기
--50~99         00~49       다음세기
--50~99         50~99       현세기