[ORACLE] 오라클 SYSDATE 사용법(어제날짜,한달전,1년전)

 

오라클 SYSDATE 사용법

안녕하세요. 오늘은 오라클의 날짜 함수인 SYSDATE 사용법에 대해 알아보겠습니다.

 

쿼리작성시 우리는 날짜를 조회조건에 걸어서 사용하는 경우가 많습니다.

 

기간검색을 할 경우에나, 특정날짜를 추출하는 경우도 있습니다.

 

프로그램 소스상에서 날짜를 입력받아서 사용할 수도 있습니다.

 

하지만 오라클에서 SYSDATE라는 날짜 함수를  제공하여서 쉽게 사용할 수 있습니다.

 

SYSDATE를 사용하여서 원하는 날짜를 컨트롤 하는 방법을 알려드릴게요.

 

1. 오늘 날짜 구하기

select SYSDATE FROM DUAL; 을 사용하여 현재 날짜를 조회 할 수 있습니다.

-- 오늘 날짜 구하는 방법
select SYSDATE FROM DUAL;

 

2. 원하는 날짜 포맷으로 데이터 가져오기

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; 
select TO_CHAR(SYSDATE,'MI') as 분 FROM DUAL; 
select TO_CHAR(SYSDATE,'SS') as 초 FROM DUAL;  
select TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') as 전체날짜 FROM DUAL;

select TO_CHAR(SYSDATE,'YYYY') as 연도,
 TO_CHAR(SYSDATE,'MM') as 월 ,
 TO_CHAR(SYSDATE,'DD') as 일 ,
 TO_CHAR(SYSDATE,'HH24') as 시간 ,
 TO_CHAR(SYSDATE,'MI') as 분,
 TO_CHAR(SYSDATE,'SS') as 초,
 TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') as 전체날짜 FROM DUAL;

 

3. 원하는 날짜 가져오기

오늘날짜 기준으로 SYSDATE에 숫자를 증감하여 일수를 구해올 수 있습니다.

select SYSDATE-1 as 하루전 FROM DUAL;
select SYSDATE+1 as 내일 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; 

 

위의 숫자 증감을 통해 3일전, 5일전 등 특정일수를 구할 수 있습니다.

하지만 몇달전이나, 몇년전 일수를 구할려고 하면 숫자를 적기에 애매한 경우가 있습니다.

그럴경우 아래와 같이 addMonths함수를 사용하면 됩니다.

 

 

4. 한달전, 일년전 날짜 가져오기 addMonths(date, integer) 

addMonths 함수는 입력받은 날짜에 입력받은 수를 월에 더하거나 뺀 날짜를 리턴해줍니다.
이 함수를 이용해서 한달전, 한달후, 일년전, 일년 후 날짜를 구해볼게요. 

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; 
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; 

select to_char(add_months(sysdate,-1),'yyyy-mm-dd') as 한달전   
,to_char(add_months(sysdate,-12),'yyyy-mm-dd') as 일년전 
,to_char(add_months(sysdate,+1),'yyyy-mm-dd') as 한달후   
,to_char(add_months(sysdate,+12),'yyyy-mm-dd') as 일년후  from dual;

ADD_MONTHS 사용시 주의할점 

매월 마지막 일수가 다릅니다. 예를들어 2월에 28일까지 있는경우, 짝수달, 홀수달등... 
오늘 날짜가 31일 인경우 하지만 전달에는 31일은 없습니다. 
이런경우에는 그달의 마지막일을 리턴받습니다. 

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;

 

 

5. 이번달 시작일자, 마지막일자 가져오기

모든 월의 시작은 1일이기떄문에 이번달의 월을 추출하여 01을 문자열로 붙여줍니다.

이번달의 마지막일은 LAST_DAY(date)함수를 사용하여 이번달 마지막 일을 가져옵니다.

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;

 

6. 이번주 시작날짜 가져오기

select TRUNC(sysdate , 'd') from dual; -- 이번주 일요일 날짜(d, dy, day 같은내용) 
select TRUNC(sysdate , 'iw') from dual; --이번주 월요일 날짜 

select TRUNC(sysdate , 'd')  as 이번주일요일
, TRUNC(sysdate , 'iw') as 이번주월요일 from dual;  

 

위의 기능을 다 쓰실 수 있으면 SYSDATE 사용하실때 불편한 점은 없으실 거에요.

댓글

Designed by JB FACTORY