「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

SQLでsysdateなどの日付型へ加算、減算してxx日後、xxヶ月後、xx年後を求める方法をメモしておきます。

xx秒後、xx秒前を求める方法

クエリー(SQL)例

  • システム日付の30秒後と30秒前を取得する例です。

実行結果

 

xx分後、xx分前を求める方法

クエリー(SQL)例

  • システム日付の5分後と5分前を取得する例です。

実行結果

 

xx時間後、xx時間前を求める方法

クエリー(SQL)例

  • システム日付の2時間後と2時間前を取得する例です。

実行結果

 

xx日後、xx日前を求める方法

クエリー(SQL)例

  • システム日付の1日後と1日前を取得する例です。

実行結果

 

xxヶ月後、xxヶ月前を求める方法

クエリー(SQL)例

  • システム日付の1ヶ月後と1ヶ月前を取得する例です。ADD_MONTHS関数は1/31の1ヶ月後は2/28となるように上手く月末日を調整してくれます。

実行結果

 

xx年後、xx年前を求める方法

クエリー(SQL)例

  • システム日付の1年後と1年前を取得する例です。ADD_MONTHS関数に12の倍数を指定することで年単位での加減算が可能となります。

実行結果

 

補足:他データベースでの日付加算と実務での注意点

本記事では Oracle を前提に日付演算を紹介しましたが、他の主要データベースでも「xx日後/xxヶ月後/xx年後」を取得する方法が存在します。移植性や比較の参考として以下に整理します。

DBMS日数加算の例月・年加算の例
OracleSYSDATE + 3ADD_MONTHS(SYSDATE, 1)(1ヶ月後) / ADD_MONTHS(SYSDATE, 12)(1年後)
MySQLDATE_ADD(NOW(), INTERVAL 3 DAY)DATE_ADD(NOW(), INTERVAL 1 MONTH) / INTERVAL 1 YEAR
SQL ServerDATEADD(day, 3, GETDATE())DATEADD(month, 1, GETDATE())
PostgreSQLCURRENT_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設計につながります。

Ads by Google

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
0
あなたの考えが大好きです、コメントしてください。x