Oracleデータベースでは、現在の日時を取得したり、日時データを操作したりするための強力な機能が用意されています。本記事では、日時データの取得方法からカスタマイズ方法、注意点までを詳しく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
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;
結果例:
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
---------
07-NOV-25
SQL> SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM DUAL;
FORMATTED_DATE
-------------------
2025-11-07 23:42:38
CURRENT_TIMESTAMP
CURRENT_TIMESTAMPは、タイムゾーン情報を含む現在の日時を返します。- 精度が高く、ナノ秒単位まで取得可能です。
SELECT CURRENT_TIMESTAMP FROM DUAL;
結果例:
SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;
CURRENT_TIMESTAMP
-----------------------------------------------------
07-NOV-25 11.43.40.227694 PM -05: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;
結果例:
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
Session altered.
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
-------------------
2025-11-07 23:44:20
注意: この設定はセッション終了後にリセットされます。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
5. タイムゾーンを考慮した日時取得
グローバルな環境では、タイムゾーンの取り扱いが重要です。
データベースおよびセッションタイムゾーンの確認
SELECT DBTIMEZONE, SESSIONTIMEZONE FROM DUAL;
結果例:
SQL> SELECT DBTIMEZONE, SESSIONTIMEZONE FROM DUAL;
DBTIME SESSIONTIMEZONE
------ -----------------------------------------------
+00:00 -05:00
タイムゾーン情報付きの現在日時
SELECT SYSTIMESTAMP FROM DUAL;
結果例:
SQL> SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
---------------------------------------------------------------------------
07-NOV-25 11.46.27.220646 PM -05:00
6. 日時の計算と比較
日数の差分を計算
2つの日付の差を計算するには、単純に引き算します。
SELECT SYSDATE - TO_DATE('2024-12-20', 'YYYY-MM-DD') AS days_difference FROM DUAL;
結果例:
SQL> SELECT SYSDATE - TO_DATE('2024-12-20', 'YYYY-MM-DD') AS days_difference FROM DUAL;
DAYS_DIFFERENCE
---------------
322.991262
日時の比較
条件付きで日付を比較し、結果を分岐させることも可能です。
SELECT CASE
WHEN SYSDATE > TO_DATE('2024-12-20', 'YYYY-MM-DD') THEN 'After'
ELSE 'Before'
END AS comparison_result FROM DUAL;
結果例:
SQL> SELECT CASE
2 WHEN SYSDATE > TO_DATE('2024-12-20', 'YYYY-MM-DD') THEN 'After'
3 ELSE 'Before'
4 END AS comparison_result FROM DUAL;
COMPAR
------
After
7. 練習問題
以下のクエリを試してみましょう。
- 現在の日時を「YYYY/MM/DD HH:MI AM」形式で表示するSQLを書いてください。
- タイムゾーン情報を含む現在の日時を取得してください。
- 現在の日付と1週間後の日付の差を計算してください。
回答はコチラ
実行結果を表示(ここをクリック)
1. 現在の日時を「YYYY/MM/DD HH:MI AM」形式で表示
SYSDATE(現在の日時)をTO_CHAR関数を使って指定の書式に変換します。
ポイントは、12時間制(HH12)と午前/午後(AMまたはPM)の書式指定子を使うことです。
SQL> SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH12:MI AM') FROM DUAL;
TO_CHAR(SYSDATE,'YY
-------------------
2025/11/07 11:34 PM
2. タイムゾーン情報を含む現在の日時を取得
SYSDATEはタイムゾーン情報を持たないDATE型です。タイムゾーン情報が必要な場合は、
TIMESTAMP WITH TIME ZONE型を返すSYSTIMESTAMPを使用します。
SQL> SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
------------------------------------------------
07-NOV-25 11.36.40.733640 PM -05:00
3. 現在の日付と1週間後の日付の差
OracleのDATE型は、数値の 1 を「1日」として加算・減算できます。
したがって、1週間後は SYSDATE + 7 と表現できます。
この2つの日付の差を計算すると、当然ながら「7」日となります。
SQL> SELECT (SYSDATE + 7) - SYSDATE FROM DUAL;
(SYSDATE+7)-SYSDATE
-------------------
7
[参考]
Oracle Database SQL言語リファレンス 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント