728x90
SYSDATE 함수란 ❓
SYSDATE는 데이터베이스 서버가 상주하는 운영 체제에 설정된 현재 날짜와 시간을 반환합니다.
반환된 값의 데이터유형은 DATE입니다.
SELECT SYSDATE
FROM DUAL;
위와 같이 실행결과를 얻을 수 있습니다.
Dual테이블은 오라클이 설치될 때 만들어지는 테이블이며, 산술, 날짜처리, 계산 등을 하는 기본 임시 테이블입니다.
TO_CHAR() 함수
ORACLE의 TO_CHAR() 함수를 사용하면 DATE에 대한 형식을 지정할 수 있습니다.
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, 'YYYY-MM-DD') as "YYYYMMDD"
, SYSDATE as "전체날짜"
FROM DUAL;
위와 같이 지정된 형식에 따라 원하는 값을 얻을 수 있습니다.
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') as "현재"
, TO_CHAR(SYSDATE+2, 'YYYY-MM-DD') as "2일후"
, TO_CHAR(SYSDATE+30, 'YYYY-MM-DD') as "30일후"
, TO_CHAR(SYSDATE-1, 'YYYY-MM-DD') as "하루 전"
, TO_CHAR(SYSDATE-10, 'YYYY-MM-DD') as "10일 전"
FROM DUAL;
위 처럼 간단한 산술 계산도 가능합니다.
일수가 아닌 달이나 연도를 기준으로 계산하는 함수가 또 하나 있습니다. 바로 ADD_MONTHS() 함수입니다.
ADD_MONTH() 함수
ADD_MONTHS() 함수는 입력받은 날짜에 입력받은 수를 월에 더하거나 뺀 날짜를 리턴해줍니다.
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 일년후
,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;
이 때 주의해야 할 점이 있습니다. ❗
바로 전달의 마지막 일수와 이번달의 마지막 일수가 다르다면 예를 들어 오늘 날짜가 31일 인경우 그 전달은 30일까지 있습니다. 이런 경우에는 그달의 마지막일을 반환받습니다.
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;
시작일자 구하기
select to_char(sysdate,'yyyy-mm') || '-01' as 이번달시작일 from dual;
모든 달의 시작 일자는 01로 모두 같기 때문에 || 연산자를 이용하여 구할 수 있습니다.
그러나 모든 달의 끝날 일자는 31, 30 28 등으로 다르기 때문에 이 때는 TRUNC()를 사용하면 편리합니다.
TRUNC()
TRUNC 함수는 오라클의 기본적인 함수로 주로 소수점 절사나 날짜의 시간을 없앨 때 사용할 수 있습니다.
SELECT SYSDATE 오늘
,TRUNC(sysdate,'iw') 월
,TRUNC(sysdate,'iw')+1 화
,TRUNC(sysdate,'iw')+2 수
,TRUNC(sysdate,'iw')+3 목
,TRUNC(sysdate,'iw')+4 금
,TRUNC(sysdate,'iw')+5 토
,TRUNC(sysdate,'iw')+6 일
FROM DUAL;
SELECT SYSDATE 오늘 ,
TRUNC(sysdate,'iw')-7 월
,TRUNC(sysdate,'iw')-6 화
,TRUNC(sysdate,'iw')-5 수
,TRUNC(sysdate,'iw')-4 목
,TRUNC(sysdate,'iw')-3 금
,TRUNC(sysdate,'iw')-2 토
,TRUNC(sysdate,'iw')-1 일
FROM DUAL;
select TRUNC(SYSDATE , 'd') as 이번주 일요일
,TRUNC(SYSDATE , 'iw') as 이번주월요일
from dual;
'w' | 매월1일 요일을 기준한 주초일자 |
'ww' | 매년 1월1일 요일을 기준한 주초일자 |
'iw' | 주초 월요일일자 |
'd' / 'dy' / 'day' | 주초 일요일 일자 |
LAST_DAY() 함수
SELECT LAST_DAY(SYSDATE) AS CASE1,
LAST_DAY(TO_DATE('2023-02-01', 'YYYY-MM-DD')) AS CASE2,
LAST_DAY(TO_DATE('2024-02-01', 'YYYY-MM-DD')) AS CASE3,
LAST_DAY(TO_DATE('2023-03-01', 'YYYY-MM-DD')) AS CASE4,
LAST_DAY(TO_DATE('2023-04-01', 'YYYY-MM-DD')) AS CASE5
FROM dual;
LAST_DAY() 함수를 이용하면 달의 마지막 날짜를 구할 수 있습니다.
'Language > SQL' 카테고리의 다른 글
[ORACLE] 평균 구하는 방법 AVG() 와 ROUND() 활용, 올림(CEIL), 내림(FLOOR), 버림(TRUNC) (0) | 2024.04.23 |
---|