Oracleで日時データを取得する方法

Oracle Master Silver

以下は記事の改良版で、内容を充実させつつ、初心者から中級者にも有用な情報を追加しました。


Oracleで日時データを取得する方法

Oracleデータベースでは、現在の日時を取得したり、日時データを操作したりするための強力な機能が用意されています。本記事では、日時データの取得方法からカスタマイズ方法、注意点までを詳しく解説します。


1. 現在日時を取得する

Oracleデータベースで現在日時を取得するには、以下の主な方法があります。

SYSDATE

  • SYSDATE関数は、データベースサーバーの現在の日付と時刻を返します。
  • デフォルトでは日付のみが表示されますが、TO_CHARを使うことで時間まで含めた表示が可能です。
-- デフォルトのSYSDATE
SELECT SYSDATE FROM DUAL;

-- 時間も含めた形式で表示
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM DUAL;

結果例:

SYSDATE:      2024-12-21
Formatted: 2024-12-21 14:35:20

CURRENT_TIMESTAMP

  • CURRENT_TIMESTAMPは、タイムゾーン情報を含む現在の日時を返します。
  • 精度が高く、ナノ秒単位まで取得可能です。
SELECT CURRENT_TIMESTAMP FROM DUAL;

結果例:

2024-12-21 14:35:20.123456 +09:00

2. 日時データ型の違い

Oracleでは、以下の日時データ型が用意されています。

データ型特徴
DATE日付と時間(秒まで)
TIMESTAMP高精度の時間(ナノ秒単位)
TIMESTAMP WITH TIME ZONEタイムゾーン情報付き
TIMESTAMP WITH LOCAL TIME ZONEセッションのタイムゾーンに合わせて変換される

3. 日時フォーマットを指定して取得

日時を特定の形式で表示するには、TO_CHAR関数を使用します。

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM DUAL;

主なフォーマットモデル

フォーマットモデル説明
YYYY西暦
MM月(01-12)
DD日(01-31)
HH24時間(24時間表記)
MI
SS

4. セッション単位でのフォーマット変更

ALTER SESSIONコマンドを使うと、日時のデフォルトフォーマットを一時的に変更できます。

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
SELECT SYSDATE FROM DUAL;

結果例:

2024-12-21 14:35:20

注意: この設定はセッション終了後にリセットされます。


5. タイムゾーンを考慮した日時取得

グローバルな環境では、タイムゾーンの取り扱いが重要です。

データベースおよびセッションタイムゾーンの確認

SELECT DBTIMEZONE, SESSIONTIMEZONE FROM DUAL;

結果例:

DBTIMEZONE:        +00:00
SESSIONTIMEZONE: +09:00

タイムゾーン情報付きの現在日時

SELECT SYSTIMESTAMP FROM DUAL;

結果例:

2024-12-21 14:35:20.123456 +09:00

6. 日時の計算と比較

日数の差分を計算

2つの日付の差を計算するには、単純に引き算します。

SELECT SYSDATE - TO_DATE('2024-12-20', 'YYYY-MM-DD') AS days_difference FROM DUAL;

結果例:

1

日時の比較

条件付きで日付を比較し、結果を分岐させることも可能です。

SELECT CASE
WHEN SYSDATE > TO_DATE('2024-12-20', 'YYYY-MM-DD') THEN 'After'
ELSE 'Before'
END AS comparison_result FROM DUAL;

結果例:

After

7. 練習問題

以下のクエリを試してみましょう。

  1. 現在の日時を「YYYY/MM/DD HH:MI AM」形式で表示するSQLを書いてください。
  2. タイムゾーン情報を含む現在の日時を取得してください。
  3. 現在の日付と1週間後の日付の差を計算してください。


[参考]
Oracle Database SQL言語リファレンス 19c

コメント

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