날짜와시간 함수에 대해서 자세히 알아보겠습니다.
먼저 날짜 형식입니다.
YYYY : 4자리 연도
YYY, YY , Y : 각각 4자리 연도의 마지막 3, 2, 1 자리
MM : 월 / DD : 1달 중 날짜(일자)
DAY : 요일 (월요일 ~ 일요일)
DY : 요일 약자 (월 ~ 일)
HH, HH12 : 12시간 / AM or PM : 오전 or 오후
HH24 : 24시간
MI : 분 / SS : 초
SYSDATE : 현재 시간 / 날짜를 반환합니다.
TO_DATE(s1, datetime형식) : 문자열 s1데이터를 날짜 데이터로 변환합니다.
select to_date('2024-12-31 오전 06:00', 'YYYY-MM-DD PM HH:MI') from dual;
TO_CHAR(date, datetime 형식) : 날짜데이터를 문자형으로 변환시켜줍니다.
select to_char(sysdate, 'YYYY-MM-DD')from dual;
특정 날짜 값을 받아오고 싶다면 sysdate자리에
to_date함수를 넣으면 됩니다.
두 함수의 차이는 반환되는 데이터 타입이 다른 것 입니다.
TO_DATE는 날짜형으로 변환해주고,
TO_CHAR은 문자형 데이터로 변환해줍니다.
ADD_MONTHS(date, 숫자) : 날짜에서 지정한 달만큼 더해줍니다. ( 1: 다음달, -1 : 이전달)
select add_months(sysdate, -3) from dual;
LAST_DAY(date) : 그 달의 마지막 날을 반환합니다.
select last_day(sysdate) from dual;
실습을 해볼까요?
1. 실행 날짜 기준 연도 조회(테이블 해더에 '연도' / 컬럼에 '2024년')
select to_char(sysdate, 'YYYY') AS 연도 FROM DUAL;
2. 실행 날짜 기준 월 조회 (테이블 헤더에 '월' / 컬럼에 '12월')
select to_char(sysdate, 'MM') AS 월 FROM DUAL;
3. 실행 날짜 기준 일 조회 (테이블 헤더에 '일' / 컬럼에 '27일')
select to_char(sysdate, 'DD') AS 일 FROM DUAL;
4. 실행 기준 시/분 조회 (테이블 헤더에 각각 '시', '분')
컬럼에 각각('?시' , '분')
select to_char(sysdate, 'HH')as 시,to_char(sysdate, 'MI') as 분 FROM DUAL;
시와 분을 같은 테이블에서 조회하기 위해서
콤마를 쓰면 복수개를 조회할 수 있다는 점이 핵심인데
단순하지만 오래 생각해 본 것 같습니다.
5. 실행 기준 시간대가 오전인지 오후인지 조회
select to_char(sysdate, 'PM') AS 오전OR오후 FROM DUAL;
별칭에 특수문자나 숫자가 들어 갈 경우
별칭을 큰따옴표로 감싸야 에러가 발생하지 않습니다.
6. 문자열 2024-12-31 오전 07:23을 문자열 '2024.12.31'로 조회
select to_char(to_date('2024-12-31 오전 07:23', 'YYYY-MM-DD PM HH:MI'), 'YYYY.MM.DD')FROM DUAL;
이때는 TO_CHAR 함수에 앞 인자로 날짜데이터가 들어가야 하므로
TO_DATE를 사용해 날짜 데이터로 변환 후 넣었습니다.
7. 실행 기준 3달 전 마지막 날은 몇월 며칠인지 조회
select last_day(add_months(sysdate, -3)) from dual;
이때는 3달 전 마지막 날을 구해야 하므로 LAST_DAY 함수의 인자에 ADD_MONTHS를 넣어줍니다.
Oracle의 내장되어 있는 날짜 함수를 알아보고
실습까지 해봤습니다.
날짜 데이터형과
문자 데이터형이 각각 어떤 함수에서
인자로 들어가는지 주의하며 사용해야 할 것 같습니다.
'Database > 이론' 카테고리의 다른 글
[DB] Where (0) | 2024.12.27 |
---|---|
[DB] 집계 / 분석/ NULL 함수 (0) | 2024.12.27 |
[DB] Read (0) | 2024.12.26 |
[DB] DML (0) | 2024.12.26 |
[DB] Alter (1) | 2024.12.26 |