2013-03-14 172 views
0

我需要類似這樣的查詢:當前月份第一天的日期和提前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。

我該怎麼做?

+0

如果日期是'2013-03-02'? – hjpotter92 2013-03-14 19:44:31

+0

我會編輯。謝謝。 – GarouDan 2013-03-14 19:47:34

+0

我只需要返回0.我正在用PHP做這個。謝謝。 – GarouDan 2013-03-14 20:07:59

回答

1

查詢:

SQLFIDDLEExample

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) 
+0

你應該小心'WHERE DATE_FORMAT(date,'%Y-%m-%d')BETWEEN ...',因爲它不能在日期使用索引。 – Vatev 2013-03-14 19:57:27

1
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)