TO_DATEで時刻が表示されない?時刻フォーマットの指定と表示方法まとめ

SQL

Oracleで日付・時刻を扱う際に使われるTO_DATETO_TIMESTAMP。これらで時刻を指定したにも関わらず、実行結果に「時刻が表示されない」という経験はありませんか?

この記事では、時刻フォーマットの正しい指定方法と「時刻が表示されない理由」、そして正しく表示するための対処法まで丁寧に解説します。

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

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


1. 基本:TO_DATEとTO_TIMESTAMPとは?

関数名説明
TO_DATE文字列を DATE型(日付+時刻) に変換
TO_TIMESTAMP文字列を TIMESTAMP型(高精度時刻) に変換

これらの関数を使うことで、文字列から日付や時刻を正確にデータ型に変換できます。


2. よく使う日付・時刻フォーマット一覧

書式意味
YYYY西暦4桁2025
MM月(01〜12)06
DD日(01〜31)15
HH24時(24時間制)14
MI30
SS45
FF1~FF9小数点以下秒.123456789

3. よくある疑問:「時刻が表示されない!」

❓ 例:TO_DATEで時刻を指定しても…

SELECT TO_DATE('2025-06-15 14:30', 'YYYY-MM-DD HH24:MI') FROM dual;

実行結果:

TO_DATE(
---------
25-06-15

「え?14:30って指定したのに、時刻が表示されない…!」


4. 理由:NLS_DATE_FORMATの影響

OracleはDATE型を表示するときに NLS_DATE_FORMAT という設定を使います
これがデフォルトだと、日付だけの表示になっており、時刻が表示されないのです。

🔍 現在のNLS_DATE_FORMATを確認する

SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT';

✅ 例:出力が「YY-MM-DD」になっている場合

TO_DATEの内部には時刻が入っていても、表示されないのは仕様です。


5. 解決策①:TO_CHARで明示的に時刻を表示

SELECT TO_CHAR(
TO_DATE('2025-06-15 14:30', 'YYYY-MM-DD HH24:MI'),
'YYYY-MM-DD HH24:MI:SS'
) AS formatted_date
FROM dual;

出力:

FORMATTED_DATE
-------------------
2025-06-15 14:30:00

👉 表示上も、正しく「時刻」まで確認できます。


6. 解決策②:NLS_DATE_FORMATをセッションで変更

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

その後に実行:

SELECT TO_DATE('2025-06-15 14:30', 'YYYY-MM-DD HH24:MI') FROM dual;

出力:

TO_DATE('2025-06-15 14:30')
---------------------------
2025-06-15 14:30:00

👉 セッション内ではすべてのDATE型がこの形式で表示されるようになります。

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

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


7. TO_TIMESTAMPを使う場合の注意点

SELECT TO_TIMESTAMP('2025-06-15 14:30:45.123', 'YYYY-MM-DD HH24:MI:SS.FF3') FROM dual;

ポイント:

  • TO_TIMESTAMPは小数秒まで扱えるが、表示も制御しないと「見えない」場合がある
  • → やはり TO_CHAR(..., 'YYYY-MM-DD HH24:MI:SS.FF3') の使用が確実

8. テキスト図で理解する「見えていないだけ」

文字列:'2025-06-15 14:30'
↓ TO_DATEで変換
内部構造:2025年6月15日 14時30分00秒(保持済)
↓ 表示が 'RR-MM-DD'
出力結果:25-06-15(時刻情報が見えないだけ)

9. 実務でのポイントまとめ

処理目的おすすめ手法
SQLで時刻も表示したいTO_CHAR(..., 'YYYY-MM-DD HH24:MI:SS') を使う
セッション内の全表示統一ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'
小数秒も扱いたいTO_TIMESTAMPFF 書式を併用

🔚 まとめ

  • TO_DATETO_TIMESTAMPは時刻情報を保持しています
  • しかし、表示には NLS_DATE_FORMAT の影響を強く受けます
  • 正確に表示させるには TO_CHAR を使うか、セッションフォーマットを変更しましょう

Oracleの開発・運用において「見えていないだけで保持されている」という性質はトラブルの元になりやすいので、今回のポイントを押さえておくことが重要です。

[参考]
SQL言語リファレンス

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

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

コメント

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