日付のみで選択する場合は、CURDATE
に基づいて計算します。 NOW
ではなく(日付のみを返します) (日付と時刻を返します)。これらの例は、1日の範囲内で常にキャッチされます:
- 今日:
WHERE timestamp >= CURDATE()
- 昨日:
WHERE timestamp >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND timestamp < CURDATE()
- 今月:
WHERE timestamp >= DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE())-1 DAY)
- 2013年6月3日から2013年6月7日までの2つの日付の間(終了日が6月7日ではなく6月8日に指定されていることに注意してください):
WHERE timestamp >= '2013-06-03' AND timestamp < '2013-06-08'
「今週」は、週を開始する日によって異なります。それはあなたにお任せします。 DAYOFWEEK
CURDATE()
を微調整する関数 適切な範囲に。
補遺 :OPの列タイプはINTEGER
でした 、UNIXタイムスタンプを格納し、私の答えは列タイプがTIMESTAMP
であると想定しました 。 UNIXタイムスタンプ値を使用して同じことをすべて実行し、列にインデックスが付けられている場合でも最適化を維持する方法は次のとおりです(TIMESTAMP
の場合は上記の回答が行います。 列にインデックスが付けられます)...
基本的に、解決策は、開始日および/または終了日を UNIX_TIMESTAMP
機能:
- 今日:
WHERE timestamp >= UNIX_TIMESTAMP(CURDATE())
- 昨日:
WHERE timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AND timestamp < UNIX_TIMESTAMP(CURDATE())
- 今月:
WHERE timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE())-1 DAY))
- 2013年6月3日と2013年6月7日の2つの日付の間(終了日が6月7日ではなく6月8日に指定されていることに注意してください):
WHERE timestamp >= UNIX_TIMESTAMP('2013-06-03') AND timestamp < UNIX_TIMESTAMP('2013-06-08')