프로그래머스 고득점 Kit에서 날짜 함수 관련 문제를 풀다 모르거나 헷갈리는 문법이 많았다. 그래서 한번 정리를 해봤다. 주요 함수는 아래와 같다.
SYSDATE
: 현재 날짜와 시간SELECT SYSDATE AS NOW
FROM DUAL;
CURRENT_DATE
: 세션 기준 현재 날짜SELECT CURRENT_DATE AS SESSION_NOW
FROM DUAL;
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
– 전체 달 이름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;
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;
MONTH_BETWEEN
: 개월 단위 차이SELECT HISTORY_ID, CAR_ID,
MONTHS_BETWEEN(END_DATE, START_DATE) AS RENTAL_MONTH_DIFF
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;
LAST_DAY
)SELECT HISTORY_ID, CAR_ID,
START_DATE,
LAST_DAY(START_DATE) AS START_MONTH_END
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;
NEXT_DAY
)SELECT HISTORY_ID, CAR_ID,
START_DATE,
NEXT_DAY(START_DATE, 'MONDAY') AS NEXT_MONDAY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;
ADD_MONTHS
)SELECT HISTORY_ID, CAR_ID,
START_DATE,
ADD_MONTHS(START_DATE, 3) AS AFTER_3_MONTHS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;
WHERE
+ TO_DATE
)SELECT *
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE >= TO_DATE('2022-10-01', 'YYYY-MM-DD');
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()
이외에는 별로 안 쓰이는 것 같다 ㅎㅎ
그래도 이번 기회에 정리하니깐 이제 더 이상 까먹을 일은 없을 것 같아 다행이다.