我需要類似這樣的查詢:當前月份第一天的日期和提前5天的日期。 MySQL的
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。
我該怎麼做?
我需要類似這樣的查詢:當前月份第一天的日期和提前5天的日期。 MySQL的
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')
該查詢probabbly不打算使用索引,因爲格式化列與函數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)
你應該小心'WHERE DATE_FORMAT(date,'%Y-%m-%d')BETWEEN ...',因爲它不能在日期使用索引。 – Vatev 2013-03-14 19:57:27
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)
如果日期是'2013-03-02'? – hjpotter92 2013-03-14 19:44:31
我會編輯。謝謝。 – GarouDan 2013-03-14 19:47:34
我只需要返回0.我正在用PHP做這個。謝謝。 – GarouDan 2013-03-14 20:07:59