2016-04-04 25 views
1

MySQLで次のSQL条件を使用して日付範囲を取得しようとしています。特定の日付範囲を返すSQL条件

and a.timestamp >= '2016-03-29' 
and a.timestamp <= '2016-03-30' 

これが0行を返しますが、私は

とa.timestamp> = '2016年3月20日' とa.timestamp < = '2016年3月31日' のような長い範囲をしようとすると、

これは、タイムスタンプ列enter image description here

2016年3月29日および2016年3月30日のためにどのような条件は、画像内の行を返しますしてくださいに以下のようになり、私がしたい行を返します。おかげ

+1

入力日付 '2016年3月30日' は、そのYを意味します私たちの時間は00:00です。ですから、2016年3月30日23:59:59までの何かが必要な場合は、a.timestamp <'2016-03-31'のような条件を設定してみてください。 –

答えて

3

はおそらく、あなたは2016年3月29日に値を持ちません。したがって、の日付はの部分のみと考えてください。一つの方法は、date()を使用することである:関数の使用は、インデックス(利用可能な場合)の使用を排除するためしかし、それは、悪い習慣である

date(a.timestamp) >= '2016-03-29' and date(a.timestamp) <= '2016-03-30' 

。代わりに、あなたはおそらくつもり:

a.timestamp >= '2016-03-29' and a.timestamp < '2016-03-31' 

は、第二の条件のため<から<=の変更に注意してください。この日付の前にすべてが取得されますが、その日が始まる深夜には取得されません。

3

は真夜中2016年3月30日の後の時間は、2016年3月30日より大きいので、あなたは、「2016年3月30日午後03時55分」

and a.timestamp >= '2016-03-29' 
and a.timestamp < '2016-03-31' 
のような値を取得するには、このようにチェックする必要があります

これは、3月29日と3月30日にすべての日時の値を返します。

0

することもできますCONVERT日付、時間ストリッピング:

and CONVERT(a.timestamp, date) >= '2016-03-29' 
and CONVERT(a.timestamp, date) <= '2016-03-31' 

2016-03-31 00:00:01あなたはまた、BETWEENを利用することができるよりも大きい2016-03-31

ですので、あなたのクエリは、特定の行を返すされていない理由は、句:

AND CONVERT(a.timestamp, date) BETWEEN '2016-03-29' AND '2016-03-31'

関連する問題