오라클 ORACLE SYSDATE 함수 사용방법
오라클의 날짜 함수인 SYSDATE
사용법에 대해 여러가지로 조사하고 배우면서, ORACLE SYSDATE 에 관한 글을 작성한다. SYSDATE
는 현재 시스템의 날짜와 시간을 반환하는 함수이다. 날짜와 관련된 연산을 할 때 사용되는 함수이다.
※ GPT와 오라클 SYSDATE 사용법 글을 읽으며 참고하여 작성
1.ORACLE SYSDATE 함수
1-1. 기본 사용법 – 오늘 날짜 구하기
SYSDATE
는 현재 날짜와 시간을 반환하는 함수이다. 이를 통해 현재 날짜를 간단히 조회할 수 있다.
SELECT SYSDATE FROM DUAL;
- 위 쿼리를 실행하면 현재 날짜와 시간이
DATE
형식으로 반환합니다. dual
은 Oracle에서 임시 테이블로 사용되며, 실제 데이터를 사용하지 않고 함수나 계산 결과를 얻는 데 사용된다.
1-2. 날짜와 시간 형식 지정하기 / 원하는 날짜 포맷으로 데이터 가져오기
SYSDATE
는 기본적으로 DATE
타입을 반환합니다. DATE
타입은 날짜와 시간을 포함하며, 그 형식은 YYYY-MM-DD HH24:MI:SS
입니다. 하지만, 반환된 날짜를 TO_CHAR
함수와 함께 사용하여 원하는 형식으로 변경할 수 있다.
TO_CHAR
함수를 사용하면 반환되는 날짜의 형식을 원하는 대로 조정할 수 있다.
SELECT TO_CHAR(SYSDATE,'YYYY') AS 연도 FROM DUAL; -- 연도 SELECT TO_CHAR(SYSDATE,'MM') AS 월 FROM DUAL; -- 월 SELECT TO_CHAR(SYSDATE,'DD') AS 일 FROM DUAL; -- 일 SELECT TO_CHAR(SYSDATE,'HH24') AS 시간 FROM DUAL; -- 시간 (24시간제) SELECT TO_CHAR(SYSDATE,'MI') AS 분 FROM DUAL; -- 분 SELECT TO_CHAR(SYSDATE,'SS') AS 초 FROM DUAL; -- 초 SELECT TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') AS 전체날짜 FROM DUAL; -- 전체날짜
- 위 쿼리들을 통해 연도, 월, 일, 시간, 분, 초 등을 각각 추출할 수 있다.
TO_CHAR
함수를 이용하면 날짜 및 시간을 특정 형식으로 변환하여 사용할 수 있다.
1-3. 날짜 연산을 통한 원하는 날짜 가져오기
SYSDATE
는 날짜와 시간 데이터를 반환하므로, SYSDATE
를 기준으로 날짜를 더하거나 빼는 연산을 통해, 예를 들어 하루 전, 하루 후, 3일 전 등의 날짜를 구할 수 있다.
예를 들어, 특정 날짜로부터 몇 일 전/후를 계산하거나, 현재 날짜와 다른 날짜의 차이를 계산할 수 있다.
SELECT SYSDATE - 1 AS 하루전 FROM DUAL; -- 하루 전 날짜 SELECT SYSDATE + 1 AS 내일 FROM DUAL; -- 내일 날짜 예: 3일 전 날짜 구하기 SELECT SYSDATE - 3 FROM dual; 예: 5일 후 날짜 구하기 SELECT SYSDATE + 5 FROM dual; SELECT TO_CHAR(SYSDATE - 1, 'YYYY-MM-DD') AS 하루전 FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS 오늘 FROM DUAL; SELECT TO_CHAR(SYSDATE + 1, 'YYYY-MM-DD') AS 내일 FROM DUAL; SELECT TO_CHAR(SYSDATE - 1, 'YYYY-MM-DD') AS 하루전, TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS 오늘, TO_CHAR(SYSDATE + 1, 'YYYY-MM-DD') AS 내일 FROM DUAL;
- 날짜 연산을 통해
SYSDATE
로부터 특정 일수를 더하거나 빼서 원하는 날짜를 쉽게 구할 수 있습니다.
1-4. 한 달 전, 1년 전 날짜 가져오기
월 단위나 연 단위로 날짜를 계산할 때는 ADD_MONTHS
함수를 사용합니다. 이 함수는 주어진 날짜에서 월을 더하거나 빼는 데 유용하다.
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') AS 한달전 FROM DUAL; -- 한 달 전 SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -12), 'YYYY-MM-DD') AS 일년전 FROM DUAL; -- 1년 전 SELECT TO_CHAR(ADD_MONTHS(SYSDATE, +1), 'YYYY-MM-DD') AS 한달후 FROM DUAL; -- 한 달 후 SELECT TO_CHAR(ADD_MONTHS(SYSDATE, +12), 'YYYY-MM-DD') AS 일년후 FROM DUAL; -- 1년 후
ADD_MONTHS
함수를 사용하여 한 달 전, 1년 전 등의 날짜를 손쉽게 구할 수 있다.- 주의사항: 날짜가 월말일인 경우,
ADD_MONTHS
함수는 계산된 날짜가 해당 월의 마지막 날로 조정될 수 있다.
SELECT ADD_MONTHS(TO_DATE('2020-03-31', 'YYYY-MM-DD'), -2) AS 두달전, ADD_MONTHS(TO_DATE('2020-03-31', 'YYYY-MM-DD'), -1) AS 한달전, ADD_MONTHS(TO_DATE('2020-03-31', 'YYYY-MM-DD'), +1) AS 한달후, ADD_MONTHS(TO_DATE('2020-03-31', 'YYYY-MM-DD'), +2) AS 두달후 FROM DUAL;
- 예를 들어 2020년 3월 31일에서 한 달 후는 4월 30일이 된다. 월의 마지막 날짜가 달라질 수 있음을 유의하자.
1-5. 이번 달 시작 일자, 마지막 일자 가져오기
이번 달의 시작일과 마지막 일자를 구하려면, LAST_DAY
함수와 날짜 조합을 활용할 수 있다.
SELECT TO_CHAR(SYSDATE, 'YYYY-MM') || '-01' AS 이번달시작일 FROM DUAL; -- 이번 달 첫 날 SELECT TO_CHAR(LAST_DAY(SYSDATE), 'YYYY-MM-DD') AS 이번달마지막일 FROM DUAL; -- 이번 달 마지막 날 SELECT TO_CHAR(SYSDATE, 'YYYY-MM') || '-01' AS 이번달시작일, TO_CHAR(LAST_DAY(SYSDATE), 'YYYY-MM-DD') AS 이번달마지막일 FROM DUAL;
SYSDATE
에서 월을 추출하고, 문자열을 추가하여 이번 달의 첫 번째 날짜를 구할 수 있다.LAST_DAY
함수는 주어진 날짜가 포함된 달의 마지막 날짜를 반환합니다.
2.ORACLE SYSDATE 함수 결합 응용
2-1. SYSDATE
와 TRUNC
함수 결합
TRUNC
함수는 날짜를 특정 단위로 잘라주는 함수입니다. 이를 SYSDATE
와 결합하여 오늘 날짜의 시작 시간이나 특정 시간 단위로 날짜를 정리할 수 있습니다.
예: 오늘 날짜의 00:00 시각 구하기
SELECT TRUNC(SYSDATE) FROM dual;
TRUNC(SYSDATE)
는 오늘 날짜의 00:00:00 시각을 반환합니다.
예: 오늘의 월 첫날 구하기
SELECT TRUNC(SYSDATE, 'MM') FROM dual;
TRUNC(SYSDATE, 'MM')
는 이번 달의 첫 번째 날짜인 00:00 시각을 반환한다.
예: 현재 주의 첫날 구하기
SELECT TRUNC(SYSDATE, 'SUNDAY') FROM dual;
TRUNC(SYSDATE, 'SUNDAY')
는 현재 주의 일요일 날짜를 반환한다.
2-2. SYSDATE
와 INTERVAL
사용
Oracle에서는 INTERVAL
키워드를 사용하여 날짜와 시간 간의 연산을 더욱 쉽게 처리할 수 있다.
예: 1시간 후의 날짜 구하기
SELECT SYSDATE + INTERVAL '1' HOUR FROM dual;
SYSDATE + INTERVAL '1' HOUR
는 현재 시간에서 1시간 후의 날짜와 시간을 반환한다.
예: 30분 전 날짜 구하기
SELECT SYSDATE - INTERVAL '30' MINUTE FROM dual;
SYSDATE - INTERVAL '30' MINUTE
는 현재 시간에서 30분 전의 날짜와 시간을 반환한다.
결론
Oracle의 SYSDATE
는 매우 유용한 함수로, 날짜와 시간 관련 작업에서 광범위하게 사용된다. 이정도만 알면 오라클에서 SYSDATE 를 사용하느데 있어 딱히 어려울 것은 없을 것이라 본다.