TO_DATE
함수는 문자열을 날짜(DATE) 타입으로 변환하는 중요한 함수입니다. SQLD 시험에서는 이 함수가 시간을 어떻게 처리하는지, 그리고 올바른 날짜 범위 검색을 위해 어떻게 사용해야 하는지를 묻는 문제가 자주 출제됩니다.
TO_DATE('문자열', '포맷')
: 주어진 문자열을 지정된 포맷에 맞춰 DATE
타입으로 변환합니다.TO_DATE
함수에 시간 정보를 생략하면, **기본값으로 00:00:00
(자정)**이 적용됩니다.BETWEEN
연산자BETWEEN
연산자는 양 끝 값을 포함합니다. TO_DATE
함수와 함께 사용될 때, 시간 정보가 생략되면 다음과 같은 문제가 발생합니다.
... WHERE hire_date BETWEEN '2025-08-22' AND '2025-08-22'
2025-08-22 00:00:00
**에 입사한 직원만 찾습니다. 그날 00:00:01 이후에 입사한 직원은 모두 제외됩니다.하루 전체(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
직전까지의 모든 시간을 포함하여 안전하게 검색할 수 있습니다.TO_DATE
는 시간을 생략하면 무조건 자정(00:00:00
)으로 설정된다는 점을 기억하세요.BETWEEN
과 <
연산자의 차이점을 묻는 경우가 많습니다.TO_DATE
STR_TO_DATE
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을 반환한다.
22일 00:00:00
부터 23일 00:00:00
직전까지 모든 시간을 포함합니다. D는 TO_CHAR
를 사용해 성능 저하가 발생할 수 있습니다.TO_DATE
로 시간 정보 없이 변환된 문자열은 자정(00:00:00
)이 됩니다. 따라서 1월 1일 00:00:00
부터 1월 31일 00:00:00
까지의 범위만 포함합니다.