ORACLE MASTER Silver DBA 取得に必要な知識のまとめ~タイムゾーンと期間編~
はじめに
本記事は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 ZONE
と TIMESTAMP WITH LOCAL TIME ZONE
のみです。
DATE
と TIMESTAMP
はタイムゾーンに対応していないため、日本のタイムゾーンで設定した 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 |
SYSDATE
と SYSTIMESTAMP
はデータベースサーバーのOSのタイムゾーンを基準にしているため、Oracle Databaseのタイムゾーンと異なる日時が返される場合があります。
このため、複数のタイムゾーンを扱う環境では、一般に SYSDATE
と SYSTIMESTAMP
の使用は推奨されません。
期間データ型
期間データ型は日時の「期間」を表すデータ型です。
以下の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