メニューボタン
サポートチーム便り2021.02.10

有効期限までのカウントダウン(QUERY定義での日付計算)

Question

データベースに格納されているyyyymmddの数字8桁の項目と本日との日数の差や、データベース上の日付のx日後までの残り日数などをQUERY上で計算できるでしょうか。

Answer

QUERYで日付計算をすることは可能です。

データベース上の8桁の数値のままでは日付の計算はできませんので、最初に8桁の数値を日付形式に変換する必要があります。

QUERY定義処理の、「結果のフィールドの定義」画面の式の定義で「DATE」関数で日付形式に変換できます。

DATE関数の引数は日付フォーマットを備えた文字形式の値が必要ですので、以下のように記述します。(yyyymmddの数字8桁のフィールド名を「FLD02」であるとします)

「結果のフィールドの定義」欄は桁数に制限があるので、関数を2つに分割しています。

スクリーンショット

上記、DB_DATECが日付フォーマットに編集した文字フィールド

DB_DATEが日付形式のフィールドです。

さらに、日付計算をするために、DAYS関数があります。日付の数値表現を返す関数です。

DAYS関数同士で演算を行う必要があります。

まず、上記DB_DATEと本日との日数の差を求めます。

スクリーンショット

SA_NISUフィールドで、DB_DATEと本日との日数の差が求められます。

CURRENT(DATE)は本日の日付形式の関数です。

本日(CURRENT(DATE))とDB_DATE(変換後の8桁の日付)、それぞれ、DAYS関数で変換した後、引いています。

次の例です。

データベース上の日付の90日後が、期限の日付として、期限まであと何日か、という値を求めます。

最初の続きで、DB_DATEがデータベース上の8桁の日付を変換したものとして続けます。

スクリーンショット

KIGENが、90日後を表します。

NOKORIが、KIGENまでの残り日数を表すことになります。

便宜上2行に分けましたが、もちろん、1行で式をまとめることもできます。

DAYS(DB_DATE) + 90 - DAYS(CURRENT(DATE))

スクリーンショット

残り日数を、レコード選択の条件にすれば、有効期限まで残り何日のデータをリストアップするなど、いろいろできそうです。

今回は、IBM Query for i での説明でした。

SQLで処理する方法については、以下の記事をご参照ください。

- 2つの日付間の日数を簡単に算出する
https://www.e-bellnet.com/category/jungle/1903/1903-54.html

by 杜

あわせて読みたい記事

PAGE TOP