日時の算術演算を完全攻略:Oracle SQLでの操作ガイド

Oracle Master Silver

Oracle SQLで日時を扱う技術は、データの抽出や集計、業務効率化に不可欠です。本記事では、日時算術演算の基本から応用、実務での活用方法までを初心者向けに丁寧に解説します。図解や例題を取り入れ、さらに深い理解をサポートします。


1. Oracleでの日時データの基本

Oracle SQLで日時を扱う際、以下のデータ型を使用します。

データ型特徴使用例
DATE年、月、日、時、分、秒を保持。現在日時を取得するSYSDATEなど
TIMESTAMPDATE型に小数秒を追加。高精度の時刻記録
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日+11
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_IDDAYS_WORKED
101365
102720

シナリオ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

コメント

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