// 날짜 시간 함수, Date Time Function
// SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP : 현재 시간을 얻는 함수
~ SYS : 오라클 서버의 시간대
~ CURRENT : 세션 설정에 따른 시간대
~ STAMP : 밀리세컨드까지
SELECT SYSDATE FROM DUAL; --23/02/17
SELECT CURRENT_DATE FROM DUAL; --23/02/17
SELECT SYSTIMESTAMP FROM DUAL; --23/02/17 08:57:02.331000000 +09:00
SELECT CURRENT_TIMESTAMP FROM DUAL; --23/17/08:58:02.00000000 ASIA_SEOUL
※세션 시간과 포맷 변경
ALTER SESSION SET TIME_ZONE = '-1:0'
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET TIME_ZONE = '00:00'; --그리니치 기준 > 영국 시간으로 설정
// EXTRACT(YEAR/MONTH/DAY/HOUR/MINUTE/SECOND FROM ...) : 날짜 추출 함수
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; --2023
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; --2
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL; --18
- 가입 회원 중 비수기(2,3,11,12)월에 가입한 회원 조회
SELECT * FROM MEMBER WHERE EXTRACT (MONTH FROM REGDATE) IN(2,3,11,12);
// ADD_MONTHS(날짜, 정수) : 날짜 추출 함수
SELECT ADD_MONTHS(SYSDATE, 1) FROM DUAL; -- 2023-03-18- 23:36:59
SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL; -- 2023-01-18- 23:36:59
- 가입한 지 6개월이 안 되는 회원 조회
SELECT * FROM MEMBER WHERE ADD_MONTHS(SYSDATE, -6) < REGDATE;
// NEXT_DAY(현재 날짜, 다음 요일) : 다음 요일을 알려주는 함수
SELECT NEXT_DAY(SYSDATE, '토요일') FROM DUAL; -- 2023-02-25 23:43:56
SELECT NEXT_DAY(SYSDATE, '토') FROM DUAL;
SELECT NEXT_DAY(SYSDATE, 7) FROM DUAL;
// LAST_DAY(날짜) : 월의 마지막 일자를 알려주는 함수
SELECT LAST_DAY(SYSDATE) FROM DUAL; -- 2023-02-28 23:45:22
SELECT LAST_DAY(ADD_MONTHS(SYSDATE, 1)) FROM DUAL; -- 2023-03-31 23:45:22
// ROUND(날짜, 포맷) : 지정된 범위에서 날짜를 반올림하는 함수
// TRUNC(날짜, 포맷) : 지정된 범위에서 날짜를 자르는 함수
--세기
SELECT ROUND('2051-02-18', 'CC') FROM DUAL; -- 2101-01-01 00:00:00
SELECT ROUND(SYSDATE, 'YEAR') FROM DUAL; -- 2023-01-01 00:00:00
--분기
SELECT ROUND(SYSDATE, 'Q') FROM DUAL; -- 2023-04-01 00:00:00
SELECT ROUND(SYSDATE, 'MONTH') FROM DUAL; -- 2023-03-01 00:00:00
SELECT ROUND(SYSDATE, 'W') FROM DUAL; -- 2023-02-22 00:00:00
SELECT ROUND(SYSDATE, 'DAY') FROM DUAL; -- 2023-02-19 00:00:00
SELECT ROUND(SYSDATE, 'HH') FROM DUAL; -- 2023-02-19 00:00:00
SELECT ROUND(SYSDATE, 'MI') FROM DUAL; -- 2023-02-18 23:49:00
SELECT TRUNC('2051-02-18', 'CC') FROM DUAL; -- 2001-01-01 00:00:00
SELECT TRUNC(SYSDATE, 'YEAR') FROM DUAL; -- 2023-01-01 00:00:00
// 날짜 연산
- 시각 - 시각
1. 일, 시, 분, 초 > 연산자(-)
2. 월, 년 > months_between(date, date)
select
name,
ibsadate,
round(sysdate - ibsadate) as "근무일수",
round(months_between(sysdate, ibsadate)) as "근무월수",
round(months_between(sysdate, ibsadate) / 12) as "근무년수",
round((sysdate - ibsadate) * 24) as "근무시수",
round((sysdate - ibsadate) * 24 * 60) as "근무분수",
round((sysdate - ibsadate) * 24 * 60 * 60) as "근무초수"
from tblInsa;
select
name,
ibsadate,
sysdate - ibsadate as "근무일수",
round(sysdate - ibsadate) as "근무일수 반올림"
from tblInsa;
select
title,
adddate,
completedate,
round((completedate - adddate) * 24, 1) as "걸린 시간"
from tblTodo
where round((completedate - adddate) * 24, 1) <= 1;
select
title,
adddate,
completedate,
round((completedate - adddate) * 24, 1) as "걸린 시간"
from tblTodo
order by round((completedate - adddate) * 24, 1) desc;
- 시각 +- 시간
1. 일, 시, 분, 초 > 연산자(+, -)
2. 월, 년 > add_months(date, +|-)
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;
select
sysdate,
sysdate + 10, --10일 뒤
add_months(sysdate, 1), --한달 뒤
add_months(sysdate, -3), --3개월 전
add_months(sysdate, 3*12) --3년 뒤
from dual;
'데이터베이스(DB) > Oracle' 카테고리의 다른 글
[Oracle] NULL 관련 함수, DECODE 함수 (0) | 2023.02.19 |
---|---|
[Oracle] 변환 함수 (0) | 2023.02.19 |
[Oracle] 숫자 함수 (0) | 2023.02.17 |
[Oracle] 문자열 함수 (0) | 2023.02.16 |
[Oracle] SELECT문 (0) | 2023.02.14 |