Oracleの日付と時刻を取得する関数

Oracle Master Silver

Oracle Databaseには、日付や時刻を取得するための便利な関数がいくつか用意されています。本記事では、CURRENT_DATECURRENT_TIMESTAMPLOCALTIMESTAMPSYSDATE、およびSYSTIMESTAMPの違いと使用例を解説します。

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

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

各関数の概要

1. CURRENT_DATE

CURRENT_DATEは、セッションのタイムゾーンに基づいて現在の日付と時刻を返します。

  • 特徴: セッションごとに異なるタイムゾーン設定に基づきます。
  • データ型: DATE(時間部分が含まれる)
SELECT CURRENT_DATE FROM DUAL;
SQL> SELECT CURRENT_DATE FROM DUAL;

CURRENT_
--------
25-01-26

2. CURRENT_TIMESTAMP

CURRENT_TIMESTAMPは、セッションのタイムゾーンに基づいて現在のタイムスタンプ(日時)を返します。

  • 特徴: タイムゾーン情報を含む日時を返します。
  • データ型: TIMESTAMP WITH TIME ZONE
SELECT CURRENT_TIMESTAMP FROM DUAL;
SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP
---------------------------------------------------------------------------
25-01-26 10:00:00.000000 +09:00

3. LOCALTIMESTAMP

LOCALTIMESTAMPは、セッションのタイムゾーンに基づいて現在のタイムスタンプを返しますが、タイムゾーン情報を含みません

  • 特徴: タイムゾーン情報を含まない純粋なタイムスタンプ。
  • データ型: TIMESTAMP
SELECT LOCALTIMESTAMP FROM DUAL;
SQL> SELECT LOCALTIMESTAMP FROM DUAL;

LOCALTIMESTAMP
---------------------------------------------------------------------------
25-01-26 10:00:00.000000

4. SYSDATE

SYSDATEは、データベースサーバーのシステム日付と時刻を返します。

  • 特徴: データベースのタイムゾーンに基づき、セッションのタイムゾーンには影響されません。
  • データ型: DATE(時間部分が含まれる)
SELECT SYSDATE FROM DUAL;
SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
--------
25-01-26

5. SYSTIMESTAMP

SYSTIMESTAMPは、データベースサーバーのシステムタイムスタンプを返します。

  • 特徴: データベースサーバーのタイムゾーン情報を含む。
  • データ型: TIMESTAMP WITH TIME ZONE
SELECT SYSTIMESTAMP FROM DUAL;
SQL> SELECT SYSTIMESTAMP FROM DUAL;

SYSTIMESTAMP
---------------------------------------------------------------------------
25-01-26 10:00:00.000000 +09:00

各関数の比較

関数データ型タイムゾーン基準タイムゾーン情報
CURRENT_DATEDATEセッションのタイムゾーン含まない
CURRENT_TIMESTAMPTIMESTAMP WITH TIME ZONEセッションのタイムゾーン含む
LOCALTIMESTAMPTIMESTAMPセッションのタイムゾーン含まない
SYSDATEDATEデータベースサーバーのタイムゾーン含まない
SYSTIMESTAMPTIMESTAMP WITH TIME ZONEデータベースサーバーのタイムゾーン含む

日付フォーマットの変更

Oracleでは、NLS_DATE_FORMATを使用して日付の表示形式を変更することができます。デフォルトでは、Oracleは日付を標準フォーマットで表示しますが、以下のようにしてフォーマットを変更することが可能です。

セッション単位での変更

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

このコマンドを実行すると、セッション内での日付表示形式が変更されます。

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
SELECT SYSDATE FROM DUAL;
SQL> alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';

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

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
-------------------
2025/01/26 10:00:00

注意: セッション単位での設定変更は、そのセッションが終了すると元に戻ります。

図解

以下は、各関数が返す値とタイムゾーン基準の関係を図解したものです。

セッションのタイムゾーン
  ├── CURRENT_DATE (DATE)
  ├── CURRENT_TIMESTAMP (TIMESTAMP WITH TIME ZONE)
  └── LOCALTIMESTAMP (TIMESTAMP)

データベースサーバーのタイムゾーン
  ├── SYSDATE (DATE)
  └── SYSTIMESTAMP (TIMESTAMP WITH TIME ZONE)

注意点

  1. タイムゾーンの設定
    • セッションのタイムゾーンは以下のSQLで確認・変更できます。
    SELECT SESSIONTIMEZONE FROM DUAL; ALTER SESSION SET TIME_ZONE = '+09:00';
  2. パフォーマンス
    • SYSDATESYSTIMESTAMPはサーバー側の値を参照するため、セッション設定に依存しません。
  3. フォーマットの変更
    • セッション単位でフォーマットを変更することで、必要に応じて日付や時刻の表示形式をカスタマイズできます。

まとめ

  • セッションのタイムゾーンを基準にした日付・時刻が必要な場合は、CURRENT_DATECURRENT_TIMESTAMPLOCALTIMESTAMPを使用します。
  • データベースサーバーのシステム時刻を基準にした値が必要な場合は、SYSDATESYSTIMESTAMPを使用します。
  • 日付や時刻の表示形式を変更する場合は、ALTER SESSION SET NLS_DATE_FORMATを活用してください。

これらの関数を理解し、適切に使い分けることで、システムやアプリケーションの要件に合った日時データを正確に扱うことができます。

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

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

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

コメント

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