0

我需要一个类似于这个的查询:

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。

我怎样才能做到这一点?

4

2 回答 2

1

询问:

SQLFIDDLE示例

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)
于 2013-03-14T19:52:00.580 回答
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)
于 2013-03-14T19:53:16.080 回答