TO_DATE 정리

TJK·2025년 8월 22일
0

TO_DATE 함수 정리

TO_DATE 함수는 문자열을 날짜(DATE) 타입으로 변환하는 중요한 함수입니다. SQLD 시험에서는 이 함수가 시간을 어떻게 처리하는지, 그리고 올바른 날짜 범위 검색을 위해 어떻게 사용해야 하는지를 묻는 문제가 자주 출제됩니다.


1. 기본 개념 및 구문

  • TO_DATE('문자열', '포맷'): 주어진 문자열을 지정된 포맷에 맞춰 DATE 타입으로 변환합니다.
  • 핵심 동작 (★★★★★): TO_DATE 함수에 시간 정보를 생략하면, **기본값으로 00:00:00(자정)**이 적용됩니다.

2. 시험에 자주 나오는 함정 (★★★★★)

함정 1: BETWEEN 연산자

BETWEEN 연산자는 양 끝 값을 포함합니다. TO_DATE 함수와 함께 사용될 때, 시간 정보가 생략되면 다음과 같은 문제가 발생합니다.

  • 잘못된 예: ... WHERE hire_date BETWEEN '2025-08-22' AND '2025-08-22'
  • 문제점: 이 쿼리는 **2025-08-22 00:00:00**에 입사한 직원만 찾습니다. 그날 00:00:01 이후에 입사한 직원은 모두 제외됩니다.

함정 2: 올바른 범위 검색

하루 전체(00:00:00 ~ 23:59:59)를 검색하려면 다음과 같은 방식을 사용해야 합니다.

  • 올바른 예: ... WHERE hire_date >= '2025-08-22' AND hire_date < '2025-08-23'
  • 설명: 2025-08-22 00:00:00부터 2025-08-23 00:00:00 직전까지의 모든 시간을 포함하여 안전하게 검색할 수 있습니다.

3. SQLD 시험 핵심 포인트

  • TO_DATE시간을 생략하면 무조건 자정(00:00:00)으로 설정된다는 점을 기억하세요.
  • 날짜 범위 검색 문제는 BETWEEN< 연산자의 차이점을 묻는 경우가 많습니다.
  • DBMS별 함수 차이:
    • Oracle: TO_DATE
    • MySQL: STR_TO_DATE

4. 암기 팁

  • TO_DATE = **TO_DA**y's TIME_ZERO (00:00:00)
  • BETWEEN = **B**etween **E**nds **T**oo (포함)

실전 기출 문제 스타일

1. 직원 테이블에서 2025년 8월 22일에 입사한 모든 직원을 조회하는 가장 안전하고 올바른 쿼리는?
A. WHERE hire_date = TO_DATE('2025-08-22', 'YYYY-MM-DD');
B. WHERE hire_date BETWEEN TO_DATE('2025-08-22', 'YYYY-MM-DD') AND TO_DATE('2025-08-22 23:59:59', 'YYYY-MM-DD HH24:MI:SS');
C. WHERE hire_date >= TO_DATE('2025-08-22', 'YYYY-MM-DD') AND hire_date < TO_DATE('2025-08-23', 'YYYY-MM-DD');
D. WHERE TO_CHAR(hire_date, 'YYYY-MM-DD') = '2025-08-22';

2. 다음 SQL 실행 결과에 대한 설명으로 옳은 것은?

SELECT COUNT(*) FROM Employees
WHERE hire_date BETWEEN TO_DATE('2025-01-01', 'YYYY-MM-DD') AND TO_DATE('2025-01-31', 'YYYY-MM-DD');

A. 1월 1일 자정부터 1월 31일 23시 59분 59초까지의 데이터를 모두 포함한다.
B. 1월 1일 자정부터 1월 31일 자정까지의 데이터만 포함한다.
C. BETWEEN을 사용했으므로 에러가 발생한다.
D. COUNT(*)는 항상 0을 반환한다.


정답 및 해설

  • 문제 1 정답: C
    • 해설: A는 자정만, B는 포맷을 명시해야 하지만 C가 가장 일반적이고 안전한 방식입니다. C는 22일 00:00:00부터 23일 00:00:00 직전까지 모든 시간을 포함합니다. D는 TO_CHAR를 사용해 성능 저하가 발생할 수 있습니다.
  • 문제 2 정답: B
    • 해설: TO_DATE로 시간 정보 없이 변환된 문자열은 자정(00:00:00)이 됩니다. 따라서 1월 1일 00:00:00부터 1월 31일 00:00:00까지의 범위만 포함합니다.
profile
Hello world!

0개의 댓글