当月第一天的日期和5天前的日期。 MySQL的

时间:2013-03-14 19:41:18

标签: mysql date

我需要一个与此类似的查询:

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。

我该怎么做?

2 个答案:

答案 0 :(得分: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')

由于使用函数DATE_FORMAT(date,'%Y-%m-%d')格式化列

,此查询可能不会使用INDEX

但是,如果您的列date数据类型为Datetime,那么您可以查询:

SELECT *
FROM myTable
WHERE date >= DATE_FORMAT(CURDATE(),'%Y-%m-01') 
AND date <= DATE_ADD(CURDATE(), INTERVAL -5 DAY)

答案 1 :(得分: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)