0

私の Access データベースには、 というテーブルがありますcustomers。このテーブルには、 という列がありますDateEntered。フィールドのデータ型は短いテキストです。

この列の値は一貫しておらず、いくつかのバリエーションがあります。

  • MM-DD-YYYY
  • MMDDYYYY
  • MM/DD/YYYY.

標準セットはないようです。

私の目標は、2012 年のすべての顧客を選択することです。

select *
from customers
where DateEntered <('%2013') AND >('%2012');

しかし、実行すると空白になります。

私が正しくできていないことを誰かが指摘できますか?さらに重要なことに、このクエリが Access で機能しない理由を説明できますか? 私のSQLの理解(あまり高度ではない)から、これはうまくいくはずです。

4

3 に答える 3

2

別のバリアント)

select * from customers where RIGHT(DateEntered, 4) = '2012'
于 2013-02-22T01:34:21.560 に答える
1

データベースとアプリケーションコードを制御できる場合、これを処理する最良の方法は、テーブル内のテキストの代わりに実際の日付フィールドを使用することです。

これを処理する1つの方法は、テーブルに新しいフィールドを追加し、クエリを1つか2つ記述して、テキスト値を実際の日付値に正しく変換し、新しいフィールドに入力することです。この時点で、このフィールドを参照するアプリケーションコードを何らかの方法で探し出し、フィールドをテキストではなく日付として扱うように調整する必要があります。これには、挿入ステートメントと更新ステートメント、レポートコードなどが含まれます。

最後に、最後のステップとして、元のテキストフィールドの名前を変更し(または完全に削除し)、新しい日付フィールドの名前を元のフィールド名に変更します。問題を修正すると、フィールドに対するクエリは簡単になります。

または、テーブルとソースコードを変更できない場合は、日付変換関数CDATE()を使用して、テキスト値を実際の日付に変換できます。日付以外のエントリ(NULLまたは空の文字列値、およびそもそも実際には日付ではない他のテキスト値)を防ぐ必要がある場合があることに注意してください。IsDate()関数はここであなたの友達になることができます。

時間と忍耐力がある場合は、データとコードを修正するのがより良いアプローチですが、これが常に実行可能であるとは限りません。

于 2013-02-22T01:05:17.693 に答える
1

演算子を使用しないのはなぜですか( andLIKEを使用するパターンがある場合に適切です):%_

select * from customers where DateEntered  like '%2013' or DateEntered  like '%2012'
于 2013-02-22T00:56:17.117 に答える