• ベストアンサー

【Access】クエリでの日付処理(常に新しい更新日を作る)

テーブルに以下のようなデータがあります。 名前 更新日 Aさん 2002-12-01 Bさん 2003-08-18 Cさん 2004-12-31 この【更新日】ですが、1年更新のため、それが過ぎると、常に次の更新日を表示したいのです。 ※2004-12-24現在 名前 更新日 Aさん 2005-12-01 Bさん 2005-08-18 Cさん 2004-12-31 (1) クエリで、上記のように実現するには、どのようにすればよいのでしょうか? (2) クエリで、日付の書式変更(例えば、2005-12-01 → 05-12-01に変更)はできますか? ※(1)ですが、私のイメージとしては、 →年と月日を分解 →(今年の年)+月日 を作る →もし、その日が既に過ぎていれば、    (翌年の年)+月日 →もし、その日がまだ過ぎていなければ、    (今年の年)+月日 こんなイメージですが、Accessでの方法がまったくわかりません。ビルダという画面で操作するのでしょうか?また、これより、もっと、よりシンプルな方法があるようでしたら、教えてください。 以上、ご指南頂けると助かります。宜しくお願い致します。 環境:Win Access 2003

質問者が選んだベストアンサー

  • ベストアンサー
  • NorthMole
  • ベストアンサー率24% (20/82)
回答No.1

(1)クエリー上であなたのイメージに基づいて作れば、 フィールド名を仮にAAとした場合、 AA: IIf([銀行テーブル]![日付]<Date(),DateSerial(Year(Date())+1,Month([銀行テーブル]![日付]),Day([銀行テーブル]![日付])),[銀行テーブル]![日付]) という感じになります。 (2)日付の書式設定を行なうには、Format関数を使えば Format$([日付],"yy-mm-dd") でできます。

wdwdwd
質問者

補足

有難うございました。 おかげ様でイメージができました。 補足ですが、アドバイス頂いた式の場合、一部ケースで意図通りにできませんでした。 今日を基準として、それより過去かどうかで判別していますが、この方法の場合、 今日:2004/12/21 日付データ:2003/12/31 上記の場合、日付データが過去のため、「2005/12/31」となります。 正解は、「2004/12/31」とならなければいけません。 Date()の部分を、 今年の年: DateSerial(Year(Date()),Month([銀行テーブル]![日付]),Day([銀行テーブル]![日付])) として、それを基準とすることで対処できました。 今日:2004/12/21 日付データ:2003/12/31 今年の年:2004/12/31 ☆ 今日を過ぎていないので、そのまま(今年の年)を表示 → 2004/12/31 OK! 今日:2004/12/21 日付データ:2003/01/31 今年の年:2004/01/31 ☆ 今日を過ぎているので、(今年の年)+1年 を表示 → 2005/01/31 OK! おそらく、この方法で大丈夫かと。 もう少し、アドバイスを募って、特になければ、解決にさせていただきたいと思います。 また、機会があれば宜しくお願い致します。

その他の回答 (2)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>Accessでの方法がまったくわかりません。 >ビルダという画面で操作するのでしょうか? クエリを作成しフィールドの欄に直に記述するかビルダを開きそこに記述するかのどちらかで出来ます。 次期更新日:IIf([更新日]<Date(),DateAdd("yyyy",1,[更新日]),[更新日]) Date()はシステム日付(本日)です。DateAddの中の"yyyy"と1は年数に1年加算するという事です。Date()(本日)より更新日が小さければ更新日に1年加算され多ければ更新日そのままで表示されます。 "y""d"は年間通算日なので1を加算しても日数を加算するだけなので1日しか加算されません。"yyyy"で1年加算されます。 あくまでもクエリで次期更新日を表示するだけなのでテーブルには反映されません。反映させたければ更新クエリを作る必要があります。更新クエリの場合も同じ関数式を使って更新できます。 >日付の書式変更(2005-12-01 → 05-12-01に変更) 表示形式の変更は#1の方の Format$([更新日],"yy-mm-dd") でクエリ上は表示されます。これもあくまでも表示上だけです。テーブルはあくまでもyyyyの西暦4桁です。

wdwdwd
質問者

お礼

わかりやすい回答ありがとうございました。 DateAdd関数は知らなかったので、勉強になりました。 書式変更は、右クリックのプロバティでも書式の欄で簡単にできるようですね。 また機会があれば、宜しくお願い致します。

  • ganbaro
  • ベストアンサー率45% (43/94)
回答No.2

#1さんのやり方でいいですが、 (1)の別のやり方としては、日付加算関数を使われてはいかがでしょうか。 #1さんの例をかりて AA: IIf([銀行テーブル]![日付]<Date(),DateAdd("y",1,[銀行テーブル]![日付]) y:年を加算 mだと月数 いろいろありますがヘルプを見てください 1:期間 マイナスにすると過去になります

wdwdwd
質問者

補足

ありがとうございます。 DateAddの方が、式がシンプルになりそうでしたので、トライしましたが、上手く行きません。 なぜか、"y"としているので、1年足されずに、1日が足されます。 AA: DateAdd("y",1,"2004-12-21") ↓ 04-12-22 mにすると、きちんと1月足されます。dにしても、04-12-22となりますので、問題ありません。 どうなっているのでしょうか。。。 ※Accessのバージョンの問題でしょうか。Access2003を使っていますが、ファイルは、以前の2000形式を使っています。

関連するQ&A