Oracle SQLで日時を扱う技術は、データの抽出や集計、業務効率化に不可欠です。本記事では、日時算術演算の基本から応用、実務での活用方法までを初心者向けに丁寧に解説します。図解や例題を取り入れ、さらに深い理解をサポートします。
リンク
リンク
リンク
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;
出力例
ONE_WEEK_LATER
-------------------
2024-01-06 10:00:00
例2: 特定の日付から5日前を求める
SELECT TO_DATE('2024-12-31', 'YYYY-MM-DD') - 5 AS five_days_earlier
FROM DUAL;
出力例
FIVE_DAYS_EARLIER
-------------------
2024-12-26 00:00:00
日付同士の差を計算する
例3: 年末までの日数を計算
SELECT TO_DATE('2024-12-31', 'YYYY-MM-DD') - SYSDATE AS days_until_year_end
FROM DUAL;
ポイント: 計算結果は小数部が時間を示す。
出力例
DAYS_UNTIL_YEAR_END
-------------------
3.5
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;
シナリオ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
コメント