日付/時刻型は、データベースを使う上で非常に良く使うデータ型です。Format関数との組み合わせで、より効果を発揮することを紹介してきました。
さて、今回は日付の加算・減算について紹介します。
DateAdd関数の活用
ある日付の1か月後を知りたい、1年後に消費期限が切れる在庫数を知りたい等、日付の加算・減算といったデータ操作は、比較的多く行われます。そんな時には、クエリでDateAdd関数を用いることが効果的です。クエリの作成、演算の設定方法は以下の記事を参考にしてください。
DateAdd関数は次のとおり定義されます。
DateAdd ( interval, number, date )
interval: 追加する時間間隔の文字列式。(省略不可)
number: 追加する間隔の数を表す数式を指定する。正の値 (将来の日付を取得する場合) または負の値 (過去の日付を取得する場合) を指定する。(省略不可)
date: 時間間隔を追加する日付(起点の日付)を表す Variant (Date) またはリテラル。
次に、intervalで定義できる文字列式として代表的なものは以下のとおりとなります。
文字列式 | 時間間隔について |
yyyy | 年 |
q | 四半期 |
m | 月 |
d | 日 |
w | 平日 |
ww | 週 |
h | 時間 |
n | 分 |
s | 秒 |
では、実際にどのように日付が加算・減算されるかを見ていきましょう。
任意のテーブルを作成して、日付/時刻型のフィールドを追加してください。そして、レコードに日付を入力してください。本記事では、「テーブル1」に「日付」フィールドを作成し、「2019/12/02」、「2019/04/01」「1985/04/01」の3レコードを追加してみました。
次に、クエリを作成し、 【フィールド】及び【テーブル】項目に次のように入力してください。
1列目: フィールド・・・日付、 テーブル・・・テーブル1
2列目: フィールド・・・1か月後: DateAdd(“m”,1,[日付])
3列目: フィールド・・・1か月前: DateAdd(“m”,-1,[日付])
4列目: フィールド・・・1年後: DateAdd(“yyyy”,1,[日付])
5列目: フィールド・・・1年前: DateAdd(“yyyy”,-1,[日付])
クエリの設定が完了したら、実行してみましょう。以上の操作は図1に示すとおりです。
いかがでしょうか。元々のレコードの日付からそれぞれ月、年での加算・減算が行われていると思います。このようにして、過去、未来の情報に変換してレコードを取得することができます。抽出条件にDateAdd関数を設定することも一つの手となります。この手法について、次で見ていきましょう。
DateAdd関数と抽出条件の組み合わせ
例えば、製造工場で材料の使用期限管理をしないといけないことを想定してください。材料を管理するためのデータベースがあるとし、材料在庫テーブルが次のようにデータを持っているとしましょう。
材料在庫テーブルのフィールド名とデータ型
フィールド名 | データ型 |
材料 | 短いテキスト |
数量 | 数値型 |
納入日 | 日付/時刻型 |
材料在庫テーブルのレコード
材料 | 数量 | 納入日 |
A材 | 100 | 2019/04/01 |
B材 | 50 | 2019/04/01 |
A材 | 60 | 2019/07/01 |
B材 | 20 | 2019/08/01 |
C材 | 150 | 2019/08/01 |
このとき、材料の使用期限が納入日から5か月以内とした場合に、今日(本記事を作成している日は2019年12月3日です。)の時点で使用できる各材料の数量はどれだけかを知りたい場合のデータ抽出方法を見てみましょう。
(上の表から、2019/08/01に納入したB材とC材が結果として抽出されるようにする方法です。)
まず、クエリを作成して「テーブルの追加」から材料在庫テーブルを設定します。次に、「材料」、「数量」及び「納入日」フィールドを【フィールド】項目に設定します。さらに、「納入日」フィールドの【抽出条件】項目に「>=DateAdd(“m”,-5,#2019/12/03#)」と入力してください。
※ 日付/時刻型のデータ型を表す場合には「#」で括ることになっています。
この抽出条件は、2019年12月3日より5か月前以降の日付、すなわち、2019年7月3日以降のレコードを抽出する条件となっています。なお、「>=」は不等号で「~以上」を表します。「>」とすれば、「~より大きい」を意味します。
また、可変的に使用期限を確認することが一般的だと思いますので、「#2019/12/03#」の代わりに「Now()」と入力すると、今から5か月前以降の日付を抽出条件としてくれます。
今の例では、「~以降」として「>=」を用いましたが、「Between 日付1 And 日付2」とすると、「日付1から日付2までの間」を抽出条件としてくれます。
まとめ
日付/時刻型のデータ操作として、DateAdd関数を紹介しました。今回の内容はクエリの応用的な使用方法で、若干とっつきにくい部分もあるかもしれませんが、一度作成しておけば、有効期限管理をしたい時などに非常に役に立ちます。ToDoリストなどをAccessで作成しておいて、該当期日を過ぎた案件のみを抽出するといったことも容易にできます。ぜひ、業務効率の改善に向けてDateAdd関数を活用してみてください。
スポンサーリンク
コメント