Oracleの日時データ型とタイムゾーンについて

Oracle Master Silver

Oracleデータベースは、さまざまな日時データ型を提供しています。これらのデータ型を適切に使用することで、日時データの管理が効率的に行えます。本記事では、DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONEについて詳しく解説し、それぞれの適切な使用方法や注意点を説明します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

1. DATEデータ型

DATEデータ型は、日時情報を保存する基本的なデータ型です。

  • 保存できる情報:
    • 年 (YEAR)
    • 月 (MONTH)
    • 日 (DAY)
    • 時 (HOUR)
    • 分 (MINUTE)
    • 秒 (SECOND)

使用例

以下は、DATE型のカラムを持つテーブルを作成し、データを挿入する例です。

CREATE TABLE date_example (
    id NUMBER,
    created_date DATE
);

INSERT INTO date_example (id, created_date)
VALUES (1, TO_DATE('2025-01-25 15:30:00', 'YYYY-MM-DD HH24:MI:SS'));
SQL> alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';

セッションが変更されました。

SQL> CREATE TABLE date_example (
2 id NUMBER,
3 created_date DATE
4 );

表が作成されました。

SQL> INSERT INTO date_example (id, created_date)
2 VALUES (1, TO_DATE('2025-01-25 15:30:00', 'YYYY-MM-DD HH24:MI:SS'));

1行が作成されました。

SQL> select * from date_example;

ID CREATED_DATE
---------- -------------------
1 2025/01/25 15:30:00

特徴と注意点

  • 特徴: タイムゾーンの情報は保存されません。
  • 注意点: 保存される時間はサーバーのデフォルトタイムゾーンに依存します。そのため、グローバルなアプリケーションでは注意が必要です。

2. TIMESTAMPデータ型

TIMESTAMPデータ型は、DATEにミリ秒単位の精度を追加したデータ型です。

  • 保存できる情報:
    • 年、月、日、時、分、秒
    • ミリ秒 (Fractional Seconds)

使用例

以下は、TIMESTAMP型のカラムを持つテーブルを作成し、データを挿入する例です。

CREATE TABLE timestamp_example (
    id NUMBER,
    event_time TIMESTAMP
);

INSERT INTO timestamp_example (id, event_time)
VALUES (1, TO_TIMESTAMP('2025-01-25 15:30:00.123', 'YYYY-MM-DD HH24:MI:SS.FF3'));
SQL> CREATE TABLE timestamp_example (
2 id NUMBER,
3 event_time TIMESTAMP
4 );

表が作成されました。

SQL> INSERT INTO timestamp_example (id, event_time)
2 VALUES (1, TO_TIMESTAMP('2025-01-25 15:30:00.123', 'YYYY-MM-DD HH24:MI:SS.FF3'));

1行が作成されました。

SQL> select * from timestamp_example;

ID EVENT_TIME
---------- ----------------------------------------------------
1 25-01-25 15:30:00.123000

特徴と注意点

  • 特徴: ミリ秒の精度が必要な場合に適しています。
  • 注意点: タイムゾーン情報は含まれないため、時間を正確に管理したい場合はタイムゾーン対応型を検討する必要があります。

3. TIMESTAMP WITH TIME ZONEデータ型

TIMESTAMP WITH TIME ZONEは、タイムゾーン情報を含むデータ型です。タイムゾーンオフセットまたは地域名を含む日時データを管理できます。

  • 保存できる情報:
    • 年、月、日、時、分、秒、ミリ秒
    • タイムゾーン (Time Zone Offset)

使用例

以下は、TIMESTAMP WITH TIME ZONE型のカラムを持つテーブルを作成し、データを挿入する例です。

CREATE TABLE timestamp_tz_example (
    id NUMBER,
    meeting_time TIMESTAMP WITH TIME ZONE
);

INSERT INTO timestamp_tz_example (id, meeting_time)
VALUES (1, TO_TIMESTAMP_TZ('2025-01-25 15:30:00 +09:00', 'YYYY-MM-DD HH24:MI:SS TZH:TZM'));
SQL> CREATE TABLE timestamp_tz_example (
2 id NUMBER,
3 meeting_time TIMESTAMP WITH TIME ZONE
4 );

表が作成されました。

SQL> INSERT INTO timestamp_tz_example (id, meeting_time)
2 VALUES (1, TO_TIMESTAMP_TZ('2025-01-25 15:30:00 +09:00', 'YYYY-MM-DD HH24:MI:SS TZH:TZM'));

1行が作成されました。

SQL> select * from timestamp_tz_example;

ID MEETING_TIME
---------- ----------------------------------------------------
1 25-01-25 15:30:00.000000 +09:00

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

特徴と注意点

  • 特徴: タイムゾーン情報を含むため、異なる地域間での日時データの比較が容易です。
  • 注意点: タイムゾーンオフセットは固定値として保存されるため、地域の夏時間 (DST) の変更を反映しません。

4. TIMESTAMP WITH LOCAL TIME ZONEデータ型

TIMESTAMP WITH LOCAL TIME ZONEは、タイムゾーン情報を含むデータ型ですが、データベース内部ではUTCに変換して保存されます。ユーザーがデータを取得する際には、セッションのタイムゾーンに変換されます。

  • 保存できる情報:
    • 年、月、日、時、分、秒、ミリ秒
    • データベース内部ではUTCとして保存

使用例

以下は、TIMESTAMP WITH LOCAL TIME ZONE型のカラムを持つテーブルを作成し、データを挿入する例です。

CREATE TABLE timestamp_ltz_example (
    id NUMBER,
    login_time TIMESTAMP WITH LOCAL TIME ZONE
);

INSERT INTO timestamp_ltz_example (id, login_time)
VALUES (1, TO_TIMESTAMP('2025-01-25 15:30:00', 'YYYY-MM-DD HH24:MI:SS'));
SQL> CREATE TABLE timestamp_ltz_example (
2 id NUMBER,
3 login_time TIMESTAMP WITH LOCAL TIME ZONE
4 );

表が作成されました。

SQL> INSERT INTO timestamp_ltz_example (id, login_time)
2 VALUES (1, TO_TIMESTAMP('2025-01-25 15:30:00', 'YYYY-MM-DD HH24:MI:SS'));

1行が作成されました。

SQL> select * from timestamp_ltz_example;

ID LOGIN_TIME
---------- ---------------------------------------------------------------------------
1 25-01-25 15:30:00.000000

特徴と注意点

  • 特徴: 異なるタイムゾーンを持つアプリケーション間でのデータ共有が容易です。
  • 注意点: セッションのタイムゾーンに依存するため、複数のタイムゾーンを跨る環境では動作を理解して設定する必要があります。

各データ型の比較

以下の表は、各データ型の特徴を比較したものです。

データ型ミリ秒タイムゾーン主な用途
DATEなしなし基本的な日時データの保存
TIMESTAMPありなしミリ秒の精度が必要な場合
TIMESTAMP WITH TIME ZONEありありグローバルな日時データの管理
TIMESTAMP WITH LOCAL TIME ZONEありセッション依存アプリケーション間のタイムゾーン変換を自動で行う場合

まとめ

Oracleの日時データ型は、用途や必要な精度に応じて選択することが重要です。たとえば、

  • タイムゾーンを無視する場合はDATEまたはTIMESTAMPを使用します。
  • タイムゾーンを考慮する場合はTIMESTAMP WITH TIME ZONEまたはTIMESTAMP WITH LOCAL TIME ZONEを使用します。

また、グローバルなアプリケーションでは、タイムゾーンの違いや地域ごとの夏時間を考慮して適切にデータ型を選ぶことが推奨されます。適切なデータ型を選ぶことで、日時データ管理が効率的かつ信頼性の高いものになります。

[参考]
Oracle Databaseデータベース管理者ガイド 19c

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました