🌟

ORACLE MASTER Silver DBA 取得に必要な知識のまとめ~タイムゾーンと期間編~

2024/07/07に公開

はじめに

本記事はORACLE MASTER Silver DBA取得に必要な知識の個人的まとめになります。

ORACLE MASTERとは

Oracle Databaseの管理スキルを証明するOracle社の資格です。

Bronze, Silver, Gold, Platinumの4ランクあります。

Oracle Databaseの日時データ型

Oracle Databaseの日時データ型は以下の通りです。

データ型 説明
DATE 日付と時刻(小数秒無し)
TIMESTAMP 日付と時刻(小数秒有り)
TIMESTAMP WITH TIME ZONE 日付と時刻(小数秒有り)及びタイムゾーン情報
TIMESTAMP WITH LOCAL TIME ZONE 正規化された日付と時刻(小数秒有り)

このうち、タイムゾーンに対応しているのは TIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE のみです。

DATETIMESTAMP はタイムゾーンに対応していないため、日本のタイムゾーンで設定した 2024/07/07 12:00:00 とアメリカ太平洋側のタイムゾーンで設定した 2024/07/07 12:00:00 を区別できません。

TIMESTAMP WITH TIME ZONE はNLS_TIMESTAMP_TZ_FORMAT初期化パラメータに設定した書式モデルで表示されます。

TIMESTAMP WITH LOCAL TIME ZONE は指定された日時をデータベースのタイムゾーンに正規化して保存します。

Oracle Databaseではセッションごとにタイムゾーンを設定し、セッションごとに異なる日時データを扱えるようにしています。

セッションのタイムゾーンは SESSIONTIMEZONE を実行して確認できます。

Oracle Databaseには現在日時を戻すファンクションがいくつか用意されています。

ファンクション 基準とするタイムゾーン 戻すデータ型
CURRENT_DATE Oracle Databaseセッションのタイムゾーン DATE
CURRENT_TIMESTAMP Oracle Databaseセッションのタイムゾーン TIMESTAMP WITH TIME ZONE
LOCALTIMESTAMP Oracle Databaseセッションのタイムゾーン TIMESTAMP
SYSDATE データベースサーバーのOSのタイムゾーン DATE
SYSTIMESTAMP データベースサーバーのOSのタイムゾーン TIMESTAMP WITH LOCAL TIME ZONE

SYSDATESYSTIMESTAMP はデータベースサーバーのOSのタイムゾーンを基準にしているため、Oracle Databaseのタイムゾーンと異なる日時が返される場合があります。

このため、複数のタイムゾーンを扱う環境では、一般に SYSDATESYSTIMESTAMP の使用は推奨されません。

期間データ型

期間データ型は日時の「期間」を表すデータ型です。

以下の2種類が存在します。

データ型 説明
INTERVAL YEAR TO MONTH 念と付きで期間を表す
INTERVAL DAY TO SECOND 日、時間、分、秒で期間を表す

INTERVAL YEAR TO MONTH

年と月で構成される期間データ型です。デフォルトでは年は2桁です。 YEAR(y) (yは数値)を指定すると格納可能な年の桁数を変更できます。

INTERVAL DAY TO SECOND

日、時、分、秒で構成される期間データ型です。デフォルトでは日は2桁、秒の小数部分の桁数は6です。日の桁数を変更したい場合は DAY(d) を指定します。同様に秒の桁数を変更したい場合は SECOND(s) を指定します。

期間リテラル

期間リテラルを使う、期間データ型の定数値を得られます。

INTERVAL '123-2' YEAR(3) TO MONTH -- 123年と2カ月
INTERVAL '4 5:12:10' DAY TO SECOND -- 4日5時間12分10秒
INTERVAL '4 5:12' DAY TO MINUTES -- 4日5時間12分
INTERVAL '5:12' HOUR TO MINUTES -- 5時間12分

また、期間データ型を使うと日時データの加減計算をわかりやすい形で実行できます。

SELECT TO_DATE('2024/01/01 00:00:00', 'yyyy/MM/DD HH24:MI:SS') + INTERVAL '1-2' YEAR TO MONTH

おわり

制約とタイムゾーンと期間編はここまで。

次回は未定です。

Discussion