Oracle SQLで日時を扱う技術は、データの抽出や集計、業務効率化に不可欠です。本記事では、日時算術演算の基本から応用、実務での活用方法までを初心者向けに丁寧に解説します。図解や例題を取り入れ、さらに深い理解をサポートします。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. Oracleでの日時データの基本
Oracle SQLで日時を扱う際、以下のデータ型を使用します。
| データ型 | 特徴 | 使用例 |
|---|---|---|
| DATE | 年、月、日、時、分、秒を保持。 | 現在日時を取得するSYSDATEなど |
| TIMESTAMP | DATE型に小数秒を追加。 | 高精度の時刻記録 |
| TIMESTAMP WITH TIME ZONE | タイムゾーン付きの日時。 | グローバルなシステムの時間計算 |
| INTERVAL YEAR TO MONTH / DAY TO SECOND | 期間(差分)を表現するためのデータ型。 | プロジェクト期間の算出 |
2. 日時算術演算の基本操作
Oracleでは、数値や日付型のデータを使った演算が簡単にできます。
日付に日数を加減する
例1: 現在日時から7日後を求める
SELECT SYSDATE + 7 AS one_week_later
FROM DUAL;
出力例
SQL> SELECT SYSDATE + 7 AS one_week_later
2 FROM DUAL;
ONE_WEEK
--------
25-11-22
例2: 特定の日付から5日前を求める
SELECT TO_DATE('2025-12-31', 'YYYY-MM-DD') - 5 AS five_days_earlier
FROM DUAL;
出力例
SQL> SELECT TO_DATE('2025-12-31', 'YYYY-MM-DD') - 5 AS five_days_earlier
2 FROM DUAL;
FIVE_DAY
--------
25-12-26
日付同士の差を計算する
例3: 年末までの日数を計算
SELECT TO_DATE('2025-12-31', 'YYYY-MM-DD') - SYSDATE AS days_until_year_end
FROM DUAL;
ポイント: 計算結果は小数部が時間を示す。
出力例
SQL> SELECT TO_DATE('2025-12-31', 'YYYY-MM-DD') - SYSDATE AS days_until_year_end
2 FROM DUAL;
DAYS_UNTIL_YEAR_END
-------------------
45.2866435
3. 時間単位の計算と具体例
Oracleでは、日時型に数値を加減することで時間単位の計算が可能です。
| 単位 | 例 | 計算式 |
|---|---|---|
| 1日 | +1 | 1 |
| 1時間 | +5時間 | + (5/24) |
| 1分 | +30分 | + (30/1440) |
| 1秒 | +10秒 | + (10/86400) |
例4: 現在の日時から5時間後を計算
SELECT SYSDATE + (5/24) AS five_hours_later
FROM DUAL;
例5: 15分後の計算
SELECT SYSDATE + (15/1440) AS fifteen_minutes_later
FROM DUAL;
4. 実務シナリオ別の応用例
シナリオ1: 過去30日間の注文履歴を取得
SELECT ORDER_ID, ORDER_DATE
FROM ORDERS
WHERE ORDER_DATE >= SYSDATE - 30;
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
シナリオ2: 勤務日数を計算
従業員ごとの勤務日数を算出する例です。
SELECT EMPLOYEE_ID,
TRUNC(SYSDATE - HIRE_DATE) AS days_worked
FROM EMPLOYEES;
出力例
| EMPLOYEE_ID | DAYS_WORKED |
|---|---|
| 101 | 365 |
| 102 | 720 |
シナリオ3: 営業時間内のトランザクションを抽出
SELECT CUSTOMER_ID, TRANSACTION_TIME
FROM TRANSACTIONS
WHERE TO_CHAR(TRANSACTION_TIME, 'HH24:MI') BETWEEN '09:00' AND '18:00';
シナリオ4: 次の定期保守日を計算
SELECT ADD_MONTHS(SYSDATE, 1) AS next_maintenance_date
FROM DUAL;
5. よくあるエラーと解決方法
エラー例1: 日付フォーマットの不一致
SELECT TO_DATE('2024-31-12', 'YYYY-MM-DD') FROM DUAL;
解決方法: 正しいフォーマットを指定。
SELECT TO_DATE('2024-12-31', 'YYYY-MM-DD') FROM DUAL;
エラー例2: NULL値による計算エラー
NULL値が含まれる場合、演算結果もNULLになります。
回避方法: NVL関数でデフォルト値を設定
SELECT NVL(SYSDATE + NULL, SYSDATE) AS default_date
FROM DUAL;
まとめ
日時の算術演算をマスターすることで、業務効率が大幅に向上します。本記事で紹介した基礎から応用例を活用して、日々のデータ操作をスムーズに進めてください。
次は、さらに高度な日時操作(INTERVAL型やタイムゾーン操作)に挑戦してみましょう。疑問点があれば、コメントやフィードバックをお待ちしています!
[参考]
Oracle Database SQL言語リファレンス 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント