
sqld를 공부하면서 계산법을 보고 뭐지싶어서 내용을 찾아보았다. 오라클에선 다음과 같이 시간을 표현한다.
SELECT sysdate, (sysdate-1/24/60) FROM dual; -- 1분 전
SELECT TO_CHAR(sysdate + 1/24, 'YYYYMMDD HH24:MI:SS') FROM dual; -- 1시간 후
값을 이용
1/24 : 1시간 (1일을 24시간으로 나누기)
1/24/60 : 1분 (1일/24시간=1시간, 1시간/60분=1분)
1/24/6 : 10분 (1일/24시간=1시간, 1시간/6분=10분)
1/24/60/6 : 10초 (1일/24시간=1시간, 1시간/60분=1분, 1분/6초=10초)
1.5/24 : 1시간 30분 (1.5일/24시간=1시간 30분)
1.5/24/6 : 15분 (1.5일/24시간=1시간 30분, 1시간30분/6분=15분)
함수 이용
ADD_MONTHS(sysdate, 1) : 1달 후
NEXT_DAY(sysdate - 8, 'SUN') -- 이전 일요일 (8일전, 다음 일요일)
NEXT_DAY(sysdate, 'SUN') -- 다음 일요일
NEXT_DAY(sysdate, 'SUNDAY') -- 다음 일요일
NEXT_DAY(sysdate, '일') -- 다음 일요일
NEXT_DAY(sysdate, '일요일') -- 다음 일요일
LAST_DAY(sysdate) -- 이번달의 마지막날
TRUNC 함수
숫자의 소수점을 절삭할 때 사용하는 함수로, 또한 날짜 형식의 날짜, 시간 이후의 값을 절삭할 때 사용할 수 있습니다.
SELECT
sysdate
, TRUNC(sysdate) -- 시간 절삭
, TRUNC(sysdate, 'YEAR') -- 월, 일 초기화
, TRUNC(sysdate, 'MONTH') -- 일 초기화
, TRUNC(sysdate, 'DAY') -- 요일 초기화(해당 주의 일요일의 일자로 초기화)
, TRUNC(sysdate, 'DD') -- 시간 절삭
, TRUNC(sysdate, 'HH24') -- 분, 초 절삭
, TRUNC(sysdate, 'MI') -- 초 절삭
FROM
dual
# 결과
sysdate : 2021-05-27 14:25:20
TRUNC(sysdate) : 2021-05-27 00:00:00
TRUNC(sysdate, 'YEAR') : 2021-01-01 00:00:00
TRUNC(sysdate, 'MONTH') : 2021-05-01 00:00:00
TRUNC(sysdate, 'DAY') : 2021-05-23 00:00:00
TRUNC(sysdate, 'DD') : 2021-05-27 00:00:00
TRUNC(sysdate, 'HH24') 2021-05-27 14:00:00
TRUNC(sysdate, 'MI') : 2021-05-27 14:25:00
[출처] [Oracle/Tibero]오라클 시간 계산(sysdate, 1/24/60, TRUNC)|작성자 로그
샘플 쿼리
select sysdate,
(sysdate-1/24/60) "1분 전",
(sysdate-1/24/30) "2분 전",
(sysdate-1/24/12) "5분 전",
(sysdate-1/24/6) "10분 전",
(sysdate-1/144) "10분 전",
(sysdate-30/1440) "30분 전",
(sysdate-1/24) "1시간 전",
trunc(sysdate-1) "1일 전",
trunc(sysdate-7) "7일 전",
trunc(sysdate-30) "30일 전",
trunc(sysdate+1)-6/24 "6AM 전",
trunc(sysdate+1)-2/24 "2PM 전"
from dual;
Sysdate : 02/15/2011 14:25:22
1분 전 : 02/15/2011 14:24:22
2분 전 : 02/15/2011 14:23:22
5분 전 : 02/15/2011 14:20:22
10분 전 : 02/15/2011 14:15:22
10분 전 : 02/15/2011 14:15:22
30분 전 : 02/15/2011 13:55:22
1시간 전 : 02/15/2011 13:25:22
1일 전 : 02/14/2011
7일 전 : 02/08/2011
30일 전 : 01/16/2011
6AM 전 : 02/15/2011 18:00:00
2PM 전 : 02/15/2011 22:00:00
select sysdate,
(sysdate+1/24/60) "1분 후",
(sysdate+1/24/30) "2분 후",
(sysdate+1/24/12) "5분 후",
(sysdate+1/24/6) "10분 후",
(sysdate+1/144) "10분 후",
(sysdate+30/1440) "30분 후",
(sysdate+1/24) "1시간 후",
trunc(sysdate+1) "1일 후",
trunc(sysdate+7) "7일 후",
trunc(sysdate+30) "30일 후",
trunc(sysdate+1)+6/24 "6AM 후",
trunc(sysdate+1)+2/24 "2PM 후"
from dual;
Sysdate : 02/15/2011 14:19:34
1분 후 : 02/15/2011 14:20:34
2분 후 : 02/15/2011 14:21:34
5분 후 : 02/15/2011 14:24:34
10분 후 : 02/15/2011 14:29:34
10분 후 : 02/15/2011 14:29:34
30분 후 : 02/15/2011 14:49:34
1시간 후 : 02/15/2011 15:19:34
1일 후 : 02/16/2011
7일 후 : 02/22/2011
30일 후 : 03/17/2011
6AM 후 : 02/16/2011 06:00:00
2PM 후 : 02/16/2011 02:00:00
'IT > SQL 도전하기' 카테고리의 다른 글
| [SQL] MongoDB와 MySQL (0) | 2024.03.13 |
|---|---|
| [SQL] REDO VS UNDO 무엇이 다를까? (0) | 2024.03.09 |
| SQL REDO: 데이터 복구와 안정성 강화 (0) | 2024.03.06 |
| SQL UNDO: 데이터 복구의 이해와 활용 (0) | 2024.02.28 |
| [SQL] 프로시저와 함수 (0) | 2024.02.09 |