정보

[Oracle SQL] 오라클 SYSDATE에서 날짜만 조회하는 2가지 방법 (TRUNC vs TO_CHAR 완전 정리)

mindlab091908 2025. 5. 7. 22:48
반응형

 

오라클(Oracle) SQL을 사용할 때 가장 자주 사용하는 함수 중 하나가 바로 SYSDATE입니다. 현재 날짜와 시간을 한 번에 조회할 수 있어 시스템 시간 기반의 데이터 처리가 필요한 다양한 상황에서 활용됩니다. 하지만 때로는 시간을 제외한 '날짜'만 필요할 때가 있습니다. 예를 들어, 오늘 입사한 직원만 조회하거나, 최근 며칠간의 데이터를 날짜 단위로 비교해야 할 경우 등이죠.

이럴 때 사용하면 좋은 함수가 바로 TRUNC와 TO_CHAR입니다. 이 글에서는 오라클 SYSDATE에서 날짜만 추출하는 방법 2가지를 상세하게 설명드리며, 각각의 장단점, 실무 예제까지 포함해 알려드리겠습니다.


1. 기본 : SYSDATE 함수란?

먼저 SYSDATE 함수에 대해 간단히 짚고 넘어가겠습니다.

SELECT SYSDATE FROM dual;
  • 이 쿼리를 실행하면 2025-05-07 10:23:45와 같이 날짜와 시간 정보가 함께 반환됩니다.
  • SYSDATE는 오라클 서버의 현재 날짜와 시간을 반환하는 내장 함수입니다.

하지만 이렇게 반환된 값에서 시간이 불필요한 경우, 아래의 두 가지 방법 중 하나를 사용해야 합니다.


2. 방법 1 : TRUNC(SYSDATE)로 시간 절삭하기

🔍 설명

TRUNC 함수는 말 그대로 **"잘라내는 함수"**입니다. 날짜에 적용하면 시간(HH24:MI:SS) 정보를 절삭하고 '날짜'만 반환합니다.

SELECT TRUNC(SYSDATE) FROM dual;

예를 들어 SYSDATE가 2025-05-07 10:23:45였다면, TRUNC(SYSDATE)는 2025-05-07 00:00:00으로 반환됩니다.

즉, 시간 정보가 0으로 초기화된 날짜만 남게 되는 것이죠.

✅ 장점

  • 형식이 DATE이기 때문에 그대로 날짜 연산이나 비교가 가능합니다.
  • WHERE 조건절에서 날짜 컬럼과 직접 비교할 때 매우 유용합니다.
  • 인덱스를 활용한 성능 최적화에도 적합합니다.

📌 실무 예제

예제 1: 오늘 입사한 직원 조회

SELECT *
  FROM emp
 WHERE hiredate = TRUNC(SYSDATE);
  • 위 쿼리는 hiredate가 오늘 날짜와 정확히 일치하는 데이터를 반환합니다.

예제 2: 최근 5일간 입사한 직원 조회

SELECT *
  FROM emp
 WHERE hiredate BETWEEN TRUNC(SYSDATE) - 5 AND SYSDATE;
  • 이 경우, TRUNC(SYSDATE) - 5는 5일 전 00:00:00부터 오늘 현재 시점까지를 의미합니다.

3. 방법 2 : TO_CHAR(SYSDATE, 'YYYY-MM-DD')로 문자열 변환

🔍 설명

TO_CHAR 함수는 날짜 형식을 **문자열(String)**로 바꿔주는 함수입니다. 다양한 포맷 지정이 가능해 사용자 입맛에 맞는 출력 형태를 만들 수 있습니다.

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;

결과:

2025-05-07
  • 시간 정보는 아예 포함되지 않고, 순수한 문자열 형태의 날짜만 출력됩니다.
  • 시각화, 로깅, 보고서 출력 등 가독성이 중요한 곳에 자주 사용됩니다.

✅ 장점

  • 출력 형식을 자유롭게 지정할 수 있어 사용자 맞춤 결과가 가능합니다.
  • 날짜를 문자열로 저장하거나 API 응답 등 UI 표출 용도에 적합합니다.

⚠️ 주의점

  • **DATE 자료형이 아닌 문자열(String)**로 반환되기 때문에 날짜 비교 연산에 바로 사용할 수 없습니다.
  • WHERE 절에서 날짜 컬럼과 비교 시 문제가 발생할 수 있어 신중하게 사용해야 합니다.

📌 실무 예제

예제 1: 날짜를 'YYYY년 MM월 DD일' 형식으로 출력

SELECT TO_CHAR(SYSDATE, 'YYYY"년 "MM"월 "DD"일"') AS today_kor
  FROM dual;

결과:

2025년 05월 07일

예제 2: 날짜만 출력하는 보고서 생성

SELECT empno, ename, TO_CHAR(hiredate, 'YYYY-MM-DD') AS 입사일
  FROM emp;
  • 각 직원의 입사일을 깔끔한 문자열 형태로 표시합니다.

4. TRUNC vs TO_CHAR 비교 정리

항목 TRUNC(SYSDATE) TO_CHAR(SYSDATE, 'YYYY-MM-DD')

반환 타입 DATE VARCHAR2 (문자열)
시간 제거 여부 시간 정보 제거 (00:00:00) 시간 정보 없음 (문자열 처리)
날짜 비교 가능 (DATE → DATE 비교) 불가능하거나 별도 처리 필요
포맷 변경 불가 자유롭게 지정 가능
사용 용도 조건 비교, 날짜 연산 출력, UI 표시, 포맷 지정 필요 시

5. 어떤 상황에 어떤 방법을 써야 할까?

📌 TRUNC 함수가 적합한 상황

  • WHERE 절에서 날짜 컬럼을 직접 비교해야 할 때
  • 날짜 간의 연산이 필요한 경우 (예: 최근 7일, 특정 일자 기준 비교)
  • DATE 타입 그대로 유지해야 할 때

📌 TO_CHAR 함수가 적합한 상황

  • 보고서 출력, 웹 UI, 로그 등 사람이 읽는 형태로 날짜를 가공할 때
  • 특정 포맷으로 날짜를 표현해야 할 때 (예: 2025/05/07 등)
  • 문자열로 날짜 정보를 전달해야 하는 시스템 연동 시

6. 결론

오라클 SQL에서 SYSDATE를 사용할 때 단순히 현재 시간을 조회하는 데 그치지 않고, 어떤 목적과 용도에 따라 TRUNC와 TO_CHAR를 적절히 활용하는 것이 중요합니다. 각각의 특성과 차이를 이해하고 상황에 맞게 사용하면 더욱 정확하고 깔끔한 쿼리 작성이 가능해집니다.

  • 조건 비교, 날짜 연산에는 TRUNC(SYSDATE)
  • 보고서 출력, 포맷 지정에는 TO_CHAR(SYSDATE, 'YYYY-MM-DD')

이 두 가지 방식은 실무에서 매우 자주 쓰이는 패턴이므로 반드시 숙지해두시길 바랍니다.


🔔 오늘의 팁:
TRUNC(SYSDATE)는 인덱스를 타는 경우가 많아 성능상 유리합니다. 반면, TO_CHAR는 문자열로 바뀌는 순간 인덱스를 사용할 수 없으므로, WHERE 조건에서는 사용을 자제하고, SELECT 절에서만 사용하는 것이 바람직합니다.

 

반응형