SQLで今日から1ヶ月後の値を抽出したい
Question
あるファイルに日付用のフィールドを用意しています。
プログラムを実行した日付から1ヶ月後のデータを抽出し、表示したいと考えています。
条件指定する方法はありますか。
外部アプリケーションからの実行を想定しているため、RPGやIBM i (AS/400)内のキューリーではなく、SQLで実行したいです。
Answer
はい、IBM i (AS/400)でも一般的なCURDATE()関数が使用可能です。
下記のようなデータが用意されているとします。

試しにIBM i Access Client Solutions(ACS)の"SQLスクリプトの実行"にてCURDATE()関数を用いる事が出来るか試してみましょう。
1ヶ月後という指定もとても簡単に出来ます。
CURDATE() +1 month
このように指定いただくだけです。実際に下記例のように指定して実行しましょう
例:一ヶ月後
select * from EBELLPF1 where date=(curdate() +1 month)

想定通り、日付フィールドが実行日(※ここでは1/20に実行しています)の1月後のデータを抽出出来ました。
単純な条件変更で別の日付を指定できます。例えば-1 dayを指定してみましょう。
結果を確認すると、1日前の日付が表示されています。

例:1ヶ月と5日後

つまりこの何ヶ月何日後...という値を変数として引っ張ってくるようにすれば、何年何ヶ月何日後、という条件をアプリケーション側から指定させるようなことも可能です。
この指定には物理ファイルのフィールドタイプがLタイプ(日付)フィールドでなければいけません。
もちろん数値タイプとして入れてしまっているのであれば、にしむくさむらい。は31から減らして計算する。と処理を組み込むことも検討出来ますが、元のデータを日付フィールドに変換してしまうのも手です。
参考:
https://www.e-bellnet.com/category/technology/1204/1204-362.html
すでに数値フィールドで日付の値を入力してしまっているのであれば、上記と組み合わせて、より処理のし易い形に組み替えてみるのをお試しいただくのもよろしいかと思います。
by 大熊猫橋