[SQL] Date Functions (날짜 함수)

FinDer178·2025년 5월 31일
0

SQL

목록 보기
4/5

0. Date Functions (날짜 함수)

프로그래머스 고득점 Kit에서 날짜 함수 관련 문제를 풀다 모르거나 헷갈리는 문법이 많았다. 그래서 한번 정리를 해봤다. 주요 함수는 아래와 같다.

1. SYSDATE: 현재 날짜와 시간

SELECT SYSDATE AS NOW
FROM DUAL;

2. CURRENT_DATE : 세션 기준 현재 날짜

SELECT CURRENT_DATE AS SESSION_NOW
FROM DUAL;

3. 날짜 → 문자열 변환 (TO_CHAR())

SELECT FIRST_NAME, LAST_NAME, TO_CHAR(HIRE_DATE, 'YYYY-MM-DD') AS HIRED
FROM EMPLOYEES
WHERE HIRE_DATE BETWEEN DATE '2016-01-01' AND DATE '2016-12-31'
ORDER BY FIRST_NAME, LAST_NAME;
  • YYYY – 연도 (4자리)
  • MM – 월 (2자리)
  • DD – 일 (2자리)
  • HH24 – 24시간 포맷
  • MI – 분
  • SS – 초
  • DY – 요일 (약어 표시 ex. SUN, MON…)
  • MONTH – 전체 달 이름

4. 연, 월, 일 추출 (EXTRACT )

대여 시작일에서 연도/월/일 추출

SELECT HISTORY_ID, CAR_ID,
			 EXTRACT(YEAR FROM START_DATE) AS START_YEAR,
			 EXTRACT(MONTH FROM START_DATE) AS START_MONTH,
			 EXTRACT(DAY FROM START_DATE) AS START_DAY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

5. 문자열 → 날짜 변환 (TO_DATE())

SELECT 
	USER_ID,
	FIRST_NAME,
	LAST_NAME,
	JOINED_DATE
FROM 
	USERS
WHERE 
	JOINED_DATE = TO_DATE('2025-03-20', 'YYYY-MM-DD');


### 5. 날짜 간 차이 (`END_DATE - START_DATE` 또는 `TRUNC` , `MONTH_BETWEEN` )

### 대여 기간 (일 수 계산)

```sql
SELECT HISTORY_ID, CAR_ID,
			 START_DATE,
			 END_DATE,
			 END_DATE - START_DATE AS RENTAL_DAYS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

6. MONTH_BETWEEN : 개월 단위 차이

SELECT HISTORY_ID, CAR_ID,
			 MONTHS_BETWEEN(END_DATE, START_DATE) AS RENTAL_MONTH_DIFF
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

7. 월 말일 구하기 (LAST_DAY )

SELECT HISTORY_ID, CAR_ID,
			 START_DATE, 
			 LAST_DAY(START_DATE) AS START_MONTH_END
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY; 

8. 다음 특정 요일 구하기 (NEXT_DAY)

SELECT HISTORY_ID, CAR_ID,
			 START_DATE,
			 NEXT_DAY(START_DATE, 'MONDAY') AS NEXT_MONDAY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

9. 몇 개월 뒤 날짜 (ADD_MONTHS)

  • 대여 시작일 기준 3개월 뒤 날짜
SELECT HISTORY_ID, CAR_ID,
			 START_DATE,
			 ADD_MONTHS(START_DATE, 3) AS AFTER_3_MONTHS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

10. 특정 조건으로 날짜 비교 (WHERE + TO_DATE )

  • 2022년 10월 이후에 시작한 대여
SELECT *
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE >= TO_DATE('2022-10-01', 'YYYY-MM-DD');

11. 날짜 시간 제거 (TRUNC)

SELECT HISTORY_ID, CAR_ID,
			 TRUNC(START_DATE) AS START_DATE_TRUNC,
			 TRUNC(END_DATE) AS END_DATE_TRUNC
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

막상 정리하고 나니깐 TO_CHAR(), TO_DATE(), EXTRACT(), MONTH_BETWEEN() 이외에는 별로 안 쓰이는 것 같다 ㅎㅎ
그래도 이번 기회에 정리하니깐 이제 더 이상 까먹을 일은 없을 것 같아 다행이다.

참고

Oracle Date Functions
프로그래머스 String, Date

profile
낙관적 개발자

0개의 댓글