次のようなクエリが必要です。
SELECT *
FROM myTable
WHERE
DATE_FORMAT(date,'%Y-%m-%d') BETWEEN <1> AND <2>
どこ<1>
で は月の最初の日の<2>
日付で、 は 5 日前の日付です。たとえば、現在の日付が 2013-03-14 の場合、<1>
2013-03-01 と 2013-03-09 にする必要があり<2>
ます。
これどうやってするの?
クエリ:
SELECT
DATE_FORMAT(NOW(),'%Y-%m-%d') d1,
DATE_FORMAT(NOW(),'%Y-%m-01') d2,
DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -5 DAY),'%Y-%m-%d') d3
結果:
| D1 | D2 | D3 |
----------------------------------------
| 2013-03-14 | 2013-03-01 | 2013-03-09 |
それで:
SELECT *
FROM myTable
WHERE DATE_FORMAT(date,'%Y-%m-%d')
BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01')
AND DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -5 DAY),'%Y-%m-%d')
このクエリは、関数を使用して列をフォーマットしているため、おそらくINDEXを使用しません。DATE_FORMAT(date,'%Y-%m-%d')
ただし、列のdate
データ型が次のDatetime
場合にクエリを実行できる場合:
SELECT *
FROM myTable
WHERE date >= DATE_FORMAT(CURDATE(),'%Y-%m-01')
AND date <= DATE_ADD(CURDATE(), INTERVAL -5 DAY)
SELECT *
FROM myTable
WHERE
DATE_FORMAT(date,'%Y-%m-%d') BETWEEN
concat(extract(year_month FROM CURDATE()),"01")
AND
from_days(to_days(CURDATE())-5)