• 締切済み

クエリで日付の抽出条件

アクセスのクエリで日付の条件抽出をしたいのです。シャープ(#)が日付のリテラル値ということまではつき止めたのですが、ここで問題発生です。 文字列には*や?のような便利な文字が使えるのに、日付で使おうとするとエラーになってしまいます。 例えば#01/05/2?# のように2001年5月20日~29日を抽出しろ、としても出来ません。 日付抽出には*や?のような文字はないんでしょうか? どうしてもないようなら関数でもしょうがないのですが、関数だと#01/1?/?3# (2001年10月~12月のうち、03、13、23日を抽出)みたいな複雑な命令が(簡単には)出来ないような気がするんです。 どなたかお助け下さい。

  • celena
  • お礼率48% (137/281)

みんなの回答

  • i-harada
  • ベストアンサー率22% (56/252)
回答No.3

プロシージャとかを使わずに大体の事はできます。 フィールド数も、256個まではたしか「OK」ですから、頭の中だけで考えずに、フローチャートを作ってから進めば、頭から煙も出なくてすみます。後から見ても、他の人が見ても理解しやすいと思います。それを組み合わせれば、かなり大きな物も作れるようになります。管理表もあったほうが良いかも知れません。 私も、会社で使っている集計用を、上記のやり方で作りました。結構重宝されています。ただ、クエリーの数は多くなります。

  • i-harada
  • ベストアンサー率22% (56/252)
回答No.2

簡単に考えて見ましょう。 日付から年・月・日をそれぞれ違うフィールドに・・ year([日付]) month([日付])  day([日付])と分散してから、それぞれ、抽出条件を設定したらどうでしょう。それか、最初の設計で、年・月・日を分けて入力するようにして、必要で開けば、別のフィールドで、DateSerial([年],[月],[日])でくっつけるってのは、どうでしょう。 

celena
質問者

お礼

ご回答ありがとうございます。 なるほど、そういう考え方もあるんですね。CHOROLYNさんの解答欄にもあるようにごくごく単純化しなければならいので、i-haradaさんの回答は結構使えるかもしれませんね。 ただ、日付の項目がひとつではないので(届けた日、引き取った日など複数あります)、それだけ項目数が増えるという意味なんですよね。 お答えを参考にして検討したいと思います。 重ね重ねお礼申し上げます。

noname#1296
noname#1296
回答No.1

日付の範囲で抽出する場合は、 Between #2001/05/20# AND #2001/05/29# の方がいいですよ。 もうひとつの場合も、 WHERE (日付 Between #2001/10/01# AND #2001/12/31#) AND ((Day(日付)=03) OR (Day(日付)=13) OR (Day(日付)=23)) などのように複数の条件を組み合わせするとか。 どうしてもワイルドカードを使う場合は Format$([日付],"yyyy/mm/dd")で文字列型にしてから Like演算子を使用してください。 この場合処理速度が遅くなりますが。

celena
質問者

お礼

ご回答ありがとうございます。 僕自身はいいのですが、このファイルを会社の人のためにできるだけ簡単に作らなければならないのです。なにしろマイツールという今となってはマニアックなソフトからMS Officeへの移行なので・・・ お答えを参考に検討させていただきます。 重ね重ねお礼申し上げます。

関連するQ&A

  • 選択クエリの抽出条件(日付の場合)

    Access2002 windows2000 日付のフィールドから選択クエリを使って、或る年度のデータを抽出するとき抽出条件に1月1日から12月31日までを入力しています。 例えば2001年のデータを抽出する場合は 抽出条件に Between #2001/01/01# And #2001/12/31# と入力しています。 これは「2001年1月1日から2001年12月31日までに該当するデータを抽出しなさい」という事ですが、年度を指定する場合は1月1日から12月31日までという事は決まっているので、もっと簡単に抽出条件を入力する方法はありませんか?

  • Access パラメータクエリの抽出条件で、月日だけの入力で2007年のデータを抽出したい

    Access のパラメータクエリで2007年の4/29~5/6までを月と日の指定だけで(4/29~5/6)選べるように記述するにはどのように書けばよいですか? 日付列の抽出条件に5/3などと記述すると2009年と判定され抽出できません。 一応抽出条件に、 2007\"/" & [(4/29~5/6)] と書いてみたのですがうまくできませんでした。 お願いします。

  • Excelクエリで日付がうまく抽出できない

    あるシートから、特定の項目(「ID」、「日付」など)を抽出して他のシートに表示させたいという依頼があったので調べてみた結果、Excelのクエリという機能に行きつきました。 ところが、文字列は問題なく抽出できるのですが、日付がところどころスキップされてしまいます。日付の欄は元のシートですべて埋まっているはずなのに、抽出結果には空白がいくつもあるのです。 一度元になるシート全体をコピーして、新しいシートにテキストとして貼り付けると、そこからは問題なく日付も抽出できるので、書式設定か何かが邪魔しているように見えますが、よく分かりません。 (このテキストとして貼り付けた新しいシートを元シートとして利用することも考えていますが、エラーの原因が分からないと、同じ現象がまた起きそうで怖いです。) 何が起きていて、どうすれば解決できるのか教えていただけませんか? また、クエリ以外の方法でもお薦めの方法がありましたらぜひ教えてください。 ちなみにVBAの知識はほぼゼロです。 どうぞよろしくお願い致します。

  • 集計クエリでの抽出条件

    アクセスのクロス集計で質問なのですが・・・ 日付ごとの集計を行いたいのですが日付が21日締めで行いたいのです。 フォームで年と月を入れるとその月の集計を行いたいのです。 (例:フォームの日付入力2008/01と入力→集計クエリで2007/12/21~2008/01/20までの集計) この場合、抽出条件はどのように行えばよいのでしょうか

  • accessクエリの抽出条件

    access初心者です。 フィールド:「年」 数値型 フィールド:「月」 数値型 があり クエリの抽出条件に 年:2001 月:11 でクエリが実行できます。 これを当月分をクエリ実行できるように 年:year(date()) 月:month(date()) のように入れて当月のレコードを抽出したいのですが 「式に未定義関数dateがあります」というメッセージが出ます。どこが間違っているか助言をいただけると助かります。

  • クエリでの抽出条件について

    クエリでの抽出条件について クエリで納品がまだ済んでいない物件について、抽出期間を設定して抽出したいのですが、うまくいかず教えてください。 抽出したいフィールドは、[納品日]、[部署]、[変更]の三つです。 フィールド[変更]は、[納品日]が変更になることがあるので、[納品日変更]というフィールドに日付が入っていたら、[変更]に[納品日変更]の日付が入るように、[納品日変更]に何も入っていなかったら、[変更]に[納品日]の日付が入るように、判定式を入れています。 [変更]の動作は、目的通りになっており問題無いのですが、いざ[納品日]、[部署]、[変更]で抽出条件を入れるとうまくいきません。 抽出条件の所に [納品日]には、Is Null [部署]には、抽出したい部署名 [変更]には、Between #2010/04/01# And #2010/05/31# それぞれAndで組んで入れていますが、何も抽出されません。 [納品日]の、Is Null と [部署]の、抽出したい部署名 のふたつだけでやると、[納品日][部署]での抽出は動作します。 しかし、この二つに[変更]をプラスし、期間を追加するとダメなようです。 [変更]のように、判定式で作ったフィールドは、抽出条件に使ってはいけないのでしょうか? それとも抽出条件のAndは二つまでとか制限があるのでしょうか? 全く別の基本的な問題が原因だと思うのですが、教えて頂きたく。

  • アクセス:DateVakueと抽出条件

    クエリで年、月、日付の文字情報からDateValueで日付に変換し、ある条件のものだけを抽出しようとしています。しかし実行すると『抽出条件でデータ型が一致しません』というエラーが出ます。 抽出条件の所に日付を入れても自動では日付を表す# #が付かないため、ここは日付のフィールドではないような気がします。 で、手動で#を付けて<#2008/01/01#のように設定すると、5秒くらいは結果が表示されるのですが、すぐ同じエラーが表示されます。 (文字列で設定(<2008/1/1)しても同じエラーが出ます。) 何がおかしいのかご教示お願いします。

  • ACCESS2000 クエリの抽出条件

    フィールドに無作為に年月日が入力されているとします。 クエリの抽出条件に>2008/1/1と入力すると「2008年1月1日よりも新しい日付のレコード」を選択できます。 新しい日付の上位25までを選択するためには、抽出条件になんと入力したらいいのでしょうか。あまりにも基本的な質問かもしれませんが、お時間の許す方にお願いします。

  • アクセス クエリー 抽出条件について

    アクセス クエリー 抽出条件について たとえば文字列で5桁の仕入先コードフィールドが有るとします。で1と3と5を除くレコードを表示させたいときは 抽出条件をどの様に設定したらよろしいでしょうか?

  • Access 抽出クエリーについての条件

    先の投稿に重複しますが、 それぞれ異なるテーブルについて、 クエリーで、、 Between #5:00# And #19:00# Between 500 And 1900 上記の方法等で同じ数値ではなく、 期間に幅をもたせて一致としそれぞれの 一致データを抽出するクエリーは つくれますか? もちろん抽出対象のテーブル、列はそれぞれ同じ書式です。 > between関数を使って、 フィールドのデータ型が日付/時刻型の場合 抽出条件欄に、 > 5:00から19:00を抽出したい、 Between #5:00# And #19:00# > 5:00から25:00を抽出したい、 Between #5:00# And #23:59# OR Between #0:00# And #1:00# Access の日付/時刻型では、25:00 というような表現はできないので、上記のように分割することになります。 > また上記がテキストだった場合も、 > 500から1900を抽出したい フィールドがテキスト型の場合、テキスト比較になり数値比較とは異なる抽出結果になるので、 フィールドに Val([テキスト型フィールド]) と式を設定して数値型に変換します。このの抽出条件に、 Between 500 And 1900 と設定します。 通報する

専門家に質問してみよう