All of My Records

[Oracle] 함수 :: 날짜 시간 함수(date time function)

by 캐떠린

날짜 시간 함수

1. sysdate

  • 현재 시스템의 시각을 반환
  • Java의 'Calendar.getInstance()'와 동일한 역할
  • date sysdate
SELECT sysdate FROM dual;

2. last_day(날짜)

  • 특정 날짜의 마짐가 일을 반환(해당 월이 몇일까지 있는지 확인할 때)
SELECT 
	sysdate,
	last_day(sysdate) -- 해당 날짜 포함된 마지막 날짜 반환(해당 월이 며칠까지?)
FROM dual;

 

3. add_months(date, 시간)

  • 시각 + 시간(월) = 시각

 

4. months_between(date, date)

  • 시각 - 시각 = 시간(월)

 

날짜 연산

1. 시각 - 시각 = 시간

2. 시각 + 시간 = 시각

3. 시각 - 시간 = 시각

 

1. 시각 - 시각 = 시간(일)

SELECT
	name,
	ibsadate,
	round(sysdate - ibsadate) AS 근무일수, -- 홍길동의 입사일: 1998-10-11, 오늘 - 입사일: 9088.6일
	round((sysdate - ibsadate) / 365) AS 근무년수, --사용 금지 > 윤년 계산을 못하므로 올바른 수치가 아님.
	round((sysdate - ibsadate) * 24) AS 근무시수,
	round((sysdate - ibsadate) * 24 * 60) AS 근무분수,
	round((sysdate - ibsadate) * 24 * 60 * 60) AS 근무초수
FROM tblinsa;

위 SQL 입력 시의 sysdate와 사진 첨부상의 sysdate가 다르기 때문에 결과값이 다를 수 있습니다!

 

-- 오라클 > 식별자 최대 길이 > 30바이트(UTF-8)
-- ORA-00972: identifier is too long
SELECT 
	title,
	adddate,
	completedate,
	round((completedate - adddate) * 24) AS 실행하기까지걸린시간
FROM tbltodo
	WHERE completedate IS NOT null
	ORDER BY round((completedate - adddate) * 24) DESC ;

 

위 결과를 통해 시각 - 시각 = 시간(일)은 월, 년 환산이 불가능함을 알 수 있다. 아래의 함수를 사용하면 정확하게 계산할 수 있다.

 

months_between(date, date)

  • 시각 - 시각 = 시간(월)
  • 사용 예시
SELECT 
	name,
	round(sysdate - ibsadate) AS "근무일수",
	round((sysdate - ibsadate) / 30) AS "근무월수", -- 30으로 나누는 것은 정확한 수치가 아님. > months_between() 사용하자!
	round(months_between(sysdate, ibsadate)) AS "근무월수",
	round(months_between(sysdate, ibsadate) / 12) AS "근무년수"
FROM tblinsa;

 

2 & 3. 시각 ± 시간(일) = 시각

SELECT 
	sysdate,
	sysdate + 100 AS "100일뒤",
	sysdate - 100 AS "100일전",
	sysdate + (3/24) AS "3시간 후",
	sysdate - (5/24) AS "5시간 전",
	sysdate + (30/60/24) AS "30분 뒤"
FROM dual;

 

아래의 함수를 사용하면 정확하게 특정 시각으로부터 몇개월 전/후를 계산할 수 있다.

add_months(date, 시간)

  • 시각 + 시간(월) = 시각
  • 사용 예시
SELECT 
	sysdate,
	add_months(sysdate, 3) AS "3개월 후",
	add_months(sysdate, -2) AS "2개월 전",
	add_months(sysdate, 5 * 12) AS "5년 뒤"
FROM dual;

 

정리

시각 - 시각

1. 일, 시, 분, 초 → 연산자(-)

2. 월, 년 → months_between()

 

시각 ± 시간

1. 일, 시, 분, 초 → 연산자(+, -)

2. 월, 년 → add_months()

 

*글 작성에 참고한 내용: 학원 쌤의 열정적인 수업

블로그의 정보

All of My Records

캐떠린

활동하기