我需要一个类似于这个的查询:
SELECT *
FROM myTable
WHERE
DATE_FORMAT(date,'%Y-%m-%d') BETWEEN <1> AND <2>
其中<1>
是当月第一天的<2>
日期,是 5 天前的日期。例如,如果当前日期为 2013-03-14,<1>
则应为 2013-03-01 和<2>
2013-03-09。
我怎样才能做到这一点?
询问:
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)