0

テーブルがあり、varchar のattendance_sheet列があります。string_date

これは私のテーブルデータの中にあります。

id | string_date  | pname 
1  | '06/03/2013' | 'sam'
2  | '08/23/2013' | 'sd'
3  | '11/26/2013' | 'rt'

この範囲を使用してクエリを実行しようとしています。

SELECT * FROM attendance_sheet
where string_date between '06/01/2013' and '12/31/2013'

その後、データを返します..しかし、これを使用してクエリを実行しようとすると

SELECT * FROM attendance_sheet
where string_date between '06/01/2013' and '03/31/2014'

結果は返されませんでした...

列タイプを変更せずに修正できます。たとえば、string_dateこれは?varcharに変更されます。date

誰かが私のケースについてアイデアを持っていますか? 事前に感謝します..

4

3 に答える 3

0

文字列比較を正しく行うには、日付の最も重要なフィールドが最初になるようにデータベースを変更する必要があります。つまり、形式を使用しますyyyy-mm-dd

于 2013-05-20T12:24:42.567 に答える
0

使用するstrftime

SELECT * FROM attendance_sheet
where strftime(string_date,'%m/%d/%Y') between '2013-06-01' and '2013-31-21'
于 2013-05-20T11:47:10.723 に答える
0

この理由:

where string_date between '06/01/2013' and '03/31/2014'

'06' が '03' より大きいということです。基本的にこのフィルターを使用するのと同じです。

where SomeField between 'b' and 'a'

この問題の原因は、設計が不十分なデータベースです。日付を文字列として保存するのは悪い考えです。Juergen は役に立つ関数を示していますが、フィールドが varchar であるため、'fred'、'barney'、'dino' などの値は完全に有効です。Str_to_date() 関数は、それらではうまく機能しません。

データベースを変更できる場合は、変更してください。

于 2013-05-20T11:54:48.713 に答える