SQLでsysdateなどの日付型へ加算、減算してxx日後、xxヶ月後、xx年後を求める方法をメモしておきます。
xx秒後、xx秒前を求める方法
クエリー(SQL)例
- システム日付の30秒後と30秒前を取得する例です。
12345SELECTsysdate "本日の日付",sysdate + 30/86400 "本日の日付 + 30秒",sysdate - 30/86400 "本日の日付 - 30秒"FROM dual;
実行結果
xx分後、xx分前を求める方法
クエリー(SQL)例
- システム日付の5分後と5分前を取得する例です。
12345SELECTsysdate "本日の日付",sysdate + 5/1440 "本日の日付 + 5分",sysdate - 5/1440 "本日の日付 - 5分"FROM dual;
実行結果
xx時間後、xx時間前を求める方法
クエリー(SQL)例
- システム日付の2時間後と2時間前を取得する例です。
12345SELECTsysdate "本日の日付",sysdate + 2/24 "本日の日付 + 2時間",sysdate - 2/24 "本日の日付 - 2時間"FROM dual;
実行結果
xx日後、xx日前を求める方法
クエリー(SQL)例
- システム日付の1日後と1日前を取得する例です。
12345SELECTsysdate "本日の日付",TO_CHAR(sysdate + 1,'YYYY-MM-DD') "本日の日付 + 1日",TO_CHAR(sysdate - 1,'YYYY-MM-DD') "本日の日付 - 1日"FROM dual;
実行結果
xxヶ月後、xxヶ月前を求める方法
クエリー(SQL)例
- システム日付の1ヶ月後と1ヶ月前を取得する例です。ADD_MONTHS関数は1/31の1ヶ月後は2/28となるように上手く月末日を調整してくれます。
12345SELECTsysdate "本日の日付",TO_CHAR(ADD_MONTHS(sysdate, 1),'YYYY-MM-DD') "本日の日付 + 1ヶ月",TO_CHAR(ADD_MONTHS(sysdate, -1),'YYYY-MM-DD') "本日の日付 - 1ヶ月"FROM dual;
実行結果
xx年後、xx年前を求める方法
クエリー(SQL)例
- システム日付の1年後と1年前を取得する例です。ADD_MONTHS関数に12の倍数を指定することで年単位での加減算が可能となります。
12345SELECTsysdate "本日の日付",TO_CHAR(ADD_MONTHS(sysdate, 12),'YYYY-MM-DD') "本日の日付 + 1年",TO_CHAR(ADD_MONTHS(sysdate, -12),'YYYY-MM-DD') "本日の日付 - 1年"FROM dual;
実行結果
補足:他データベースでの日付加算と実務での注意点
本記事では Oracle を前提に日付演算を紹介しましたが、他の主要データベースでも「xx日後/xxヶ月後/xx年後」を取得する方法が存在します。移植性や比較の参考として以下に整理します。
| DBMS | 日数加算の例 | 月・年加算の例 |
|---|---|---|
| Oracle | SYSDATE + 3 | ADD_MONTHS(SYSDATE, 1)(1ヶ月後) / ADD_MONTHS(SYSDATE, 12)(1年後) |
| MySQL | DATE_ADD(NOW(), INTERVAL 3 DAY) | DATE_ADD(NOW(), INTERVAL 1 MONTH) / INTERVAL 1 YEAR |
| SQL Server | DATEADD(day, 3, GETDATE()) | DATEADD(month, 1, GETDATE()) |
| PostgreSQL | CURRENT_DATE + INTERVAL '3 day' | + INTERVAL '1 month' / '1 year' |
月末日の扱いについて注意
-
Oracle の
ADD_MONTHS('2024-01-31', 1)→2024-02-29(存在しない日付は月末に補正) -
MySQLやPostgreSQL でも同様に月末補正される場合があります
-
契約更新日などで「きっちり同日を基準にしたい」場合は仕様確認が必要です
実務でよくある活用例
-
支払期限:請求日+30日
-
契約更新:契約開始日から6ヶ月後/1年後
-
リマインダー:イベント前7日/前1時間
-
登録日を基準としたステップメール通知
減算にも応用可能
-
ADD_MONTHS(SYSDATE, -1)→ 1ヶ月前 -
SYSDATE - 7→ 7日前
📌 上記を踏まえると、「日付加算はDBごとに関数が異なる」「月末や閏年の補正挙動を理解しておく」という点を意識しておくと、より安全なSQL設計につながります。






