날짜 및 시간 데이터 표시

Oracle 데이터베이스에서 날짜 및 시간 데이터의 중요성

날짜와 시간은 비즈니스 로직, 이벤트 추적, 스케줄링 등 다양한 데이터베이스 애플리케이션에서 핵심적인 역할을 합니다. Oracle 데이터베이스는 이러한 데이터를 효율적으로 저장하고 관리하기 위해 다양한 데이터 유형과 함수를 제공합니다. 이 글에서는 Oracle 데이터베이스에서 날짜 및 시간 데이터를 효과적으로 다루는 방법에 대해 자세히 알아보겠습니다.

날짜 및 시간 데이터 유형

Oracle은 다음과 같은 날짜 및 시간 데이터 유형을 제공합니다:

  • DATE: 날짜와 시간을 모두 저장합니다 (년, 월, 일, 시, 분, 초).
  • TIMESTAMP: DATE 유형보다 더 정밀한 시간 값을 저장합니다 (나노초 단위까지).
  • TIMESTAMP WITH TIME ZONE: 타임존 정보를 포함한 TIMESTAMP를 저장합니다.
  • TIMESTAMP WITH LOCAL TIME ZONE: 데이터베이스 타임존에 따라 자동으로 변환되는 TIMESTAMP를 저장합니다.
  • INTERVAL YEAR TO MONTH: 년과 월 간격을 저장합니다.
  • INTERVAL DAY TO SECOND: 일, 시, 분, 초 간격을 저장합니다.

날짜 및 시간 데이터 표시

날짜 및 시간 데이터를 다양한 형식으로 표시하기 위해 TO_CHAR 함수를 사용합니다. 이 함수를 통해 날짜 형식을 문자열로 변환할 수 있습니다.

기본 사용법

TO_CHAR(date_value, format_mask, nls_params)

  • date_value: 변환할 날짜 값
  • format_mask: 원하는 형식 지정 문자열 (예: YYYY-MM-DD HH24:MI:SS)
  • nls_params: NLS(National Language Support) 매개변수 (예: ‘NLS_DATE_LANGUAGE=KOREAN’)

자주 사용되는 형식 마스크

  • YYYY: 4자리 년도
  • MM: 2자리 월 (01-12)
  • DD: 2자리 일 (01-31)
  • HH24: 24시간 형식 (00-23)
  • HH: 12시간 형식 (01-12)
  • MI: 2자리 분 (00-59)
  • SS: 2자리 초 (00-59)
  • FFn: 초의 소수점 이하 자릿수 (n은 1부터 9까지)

예시

다음은 현재 날짜와 시간을 다양한 형식으로 표시하는 예시입니다.


SELECT
    SYSDATE AS original_date,
    TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date1,
    TO_CHAR(SYSDATE, 'YYYY년 MM월 DD일 HH24시 MI분 SS초', 'NLS_DATE_LANGUAGE=KOREAN') AS formatted_date2,
    TO_CHAR(SYSDATE, 'Dy, DD Mon YYYY', 'NLS_DATE_LANGUAGE=ENGLISH') AS formatted_date3
FROM DUAL;
  

실행 결과 예시


ORIGINAL_DATE           FORMATTED_DATE1       FORMATTED_DATE2                      FORMATTED_DATE3
----------------------- --------------------- ------------------------------------ ------------------------
2024-08-04 14:30:00   2024-08-04 14:30:00   2024년 08월 04일 14시 30분 00초   Sun, 04 Aug 2024

  

날짜 및 시간 데이터 삽입 및 업데이트

날짜 및 시간 데이터를 테이블에 삽입하거나 업데이트할 때 TO_DATE 또는 TO_TIMESTAMP 함수를 사용하여 문자열을 날짜 또는 시간 데이터 유형으로 변환합니다.

기본 사용법

  • TO_DATE(string, format_mask, nls_params)
  • TO_TIMESTAMP(string, format_mask, nls_params)

예시

다음은 employees 테이블에 새로운 직원을 추가하고, 입사 날짜를 지정하는 예시입니다.


INSERT INTO employees (
    employee_id,
    first_name,
    last_name,
    hire_date
) VALUES (
    1001,
    '길동',
    '홍',
    TO_DATE('2023-03-10', 'YYYY-MM-DD')
);
  

다음은 employees 테이블에서 특정 직원의 입사 날짜를 업데이트하는 예시입니다.


UPDATE employees
SET
    hire_date = TO_DATE('2024-01-01 09:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE
    employee_id = 1001;
  

날짜 및 시간 연산

Oracle은 날짜 및 시간 데이터에 대한 다양한 연산을 수행할 수 있는 함수를 제공합니다. 예를 들어, 두 날짜 사이의 일수를 계산하거나, 특정 날짜에 일정 기간을 더할 수 있습니다.

자주 사용되는 함수

  • SYSDATE: 현재 데이터베이스 서버의 날짜와 시간을 반환합니다.
  • CURRENT_TIMESTAMP: 현재 데이터베이스 서버의 타임스탬프를 반환합니다.
  • ADD_MONTHS(date, integer): 특정 날짜에 지정된 월 수를 더합니다.
  • MONTHS_BETWEEN(date1, date2): 두 날짜 사이의 월 수를 반환합니다.
  • LAST_DAY(date): 해당 달의 마지막 날짜를 반환합니다.
  • NEXT_DAY(date, day): 지정된 요일의 다음 날짜를 반환합니다.
  • TRUNC(date, format): 지정된 형식으로 날짜를 자릅니다 (예: TRUNC(SYSDATE, ‘MM’)은 해당 월의 첫 번째 날짜를 반환합니다).
  • EXTRACT(datetime_field FROM date): 날짜에서 특정 필드 (년, 월, 일 등)를 추출합니다.

예시

다음은 현재 날짜에서 3개월 후의 날짜를 계산하는 예시입니다.


SELECT
    ADD_MONTHS(SYSDATE, 3) AS future_date
FROM DUAL;
  

실행 결과 예시


FUTURE_DATE
------------------
2024-11-04 14:30:00

  

타임존 처리

타임존 정보는 전역적으로 분산된 애플리케이션에서 매우 중요합니다. Oracle은 TIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE 데이터 유형을 통해 타임존 정보를 효과적으로 처리할 수 있습니다.

TIMESTAMP WITH TIME ZONE 사용법

TIMESTAMP WITH TIME ZONE은 타임존 정보를 명시적으로 저장합니다.


CREATE TABLE time_zone_example (
    ts_tz TIMESTAMP WITH TIME ZONE
);

INSERT INTO time_zone_example (ts_tz) VALUES (
    TO_TIMESTAMP_TZ('2024-08-04 14:30:00 Asia/Seoul', 'YYYY-MM-DD HH24:MI:SS TZR')
);

SELECT ts_tz FROM time_zone_example;
  

TIMESTAMP WITH LOCAL TIME ZONE 사용법

TIMESTAMP WITH LOCAL TIME ZONE은 데이터베이스 타임존에 따라 자동으로 변환됩니다.


CREATE TABLE local_time_zone_example (
    ts_ltz TIMESTAMP WITH LOCAL TIME ZONE
);

INSERT INTO local_time_zone_example (ts_ltz) VALUES (
    TO_TIMESTAMP('2024-08-04 14:30:00', 'YYYY-MM-DD HH24:MI:SS')
);

SELECT ts_ltz FROM local_time_zone_example;
  

추가 팁

  • 성능 최적화: 날짜 및 시간 컬럼에 인덱스를 생성하여 쿼리 성능을 향상시킬 수 있습니다. 특히 BETWEEN 연산자와 함께 날짜 범위를 사용하는 경우 인덱스 사용이 중요합니다.
  • NLS 설정 활용: NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT 등의 NLS 매개변수를 사용하여 날짜 및 시간 형식의 기본값을 설정할 수 있습니다.
  • 에러 처리: 날짜 및 시간 데이터 처리 시 발생할 수 있는 예외 (예: 잘못된 형식)를 적절하게 처리하도록 애플리케이션을 설계합니다.

결론

Oracle 데이터베이스에서 날짜 및 시간 데이터 유형과 함수를 효과적으로 활용하면 다양한 애플리케이션 요구 사항을 충족할 수 있습니다. 이 가이드를 통해 날짜 및 시간 데이터를 효율적으로 저장, 관리, 표시하고 연산하는 방법을 익히셨기를 바랍니다.

위로 스크롤