1

MS ACCESS 2010 に奇妙な問題があります。
列を持つテーブル RawData がありますTaskDate(形式はメモです)。以下のクエリを使用すると、目的のデータが得られます。

`select * from RawData where TaskDate between '01/01/2012' and '12/31/2012'`

しかし、以下のクエリを使用すると、データが取得されません。

select * from RawData where TaskDate between '01/01/2012' and '01/01/2013'

この「年」の値でデータ比較が行われていないため、問題がわかりません。これについて助けてください

4

1 に答える 1

0

ああ、おい。それがどれほど悪いことか分かりますか?「データベースの使い方がわからない」スタイル、悲しいことに。データ型に関するドキュメントを読む時間です。

わかりました、ここに行きます:

TaskDate (形式はメモ)

はい、しかし、それは公にむち打たれるべきでした。第一に、これは TEXT フィールドであり、第二に、日付が存在しない LONG テキスト用です。2 つのレベルで失敗します。

形式がメモの場合はテキストなので、「between」はテキストを比較します。

'01/01/2012' および '12/31/2012'`

それは左から右です。

つまり、最初の文字 0 または 1、2 番目の文字 1 または 2、0 と 3 の間の 4 番目の文字、1 と 1 の間の 5 番目の文字。

「2012 年 1 月 1 日」および「2013 年 1 月 1 日」

これは、基本的に 2012 年と 2013 年の 01/01 のすべてを意味します。これが休日で、タスクがないと仮定すると、データはありません。なんで?他の日付は失敗するためです。最初の文字は「01/01/201」と一致する必要があります。

それを適切に行いたい場合は、次のことができます。

  • 日付の書式を変更して、テキストとして意味のあるものにします。それは ISO 規格です: 2012-01-01 から 2012-12-31。つまり、左から右に進むにつれて正しい順序になります。

  • ベター: 日付にメモを使うという馬鹿げた考えは捨てる

読んだ

http://www.dummies.com/how-to/content/tips-for-choosing-field-types-in-access-2010.html

次に、日付/時刻をフィールド タイプとして使用すると、魔法のように Access はテキストを比較しようとせず (内部的に何を意味するのか分からないため、日付のセマンティクスをテキストに適用することはできません)、実際の日付を比較しません。

今、「日付」比較がないことを確認しました。これは、左から右へ、1 文字ずつ、追加のロジックがない、純粋でばかげた小さな文字列です。

于 2013-01-01T10:50:10.107 に答える