2011-05-19 50 views

回答

94

可以拿到第一个月,由之前计算每月的LAST_DAY并添加一天。这很尴尬,但我认为它比将日期格式化为字符串并将其用于计算更好。

select 
    * 
from 
    yourtable t 
where 
    /* Greater or equal to the start of last month */ 
    t.date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) and 
    /* Smaller or equal than one month ago */ 
    t.date <= DATE_SUB(NOW(), INTERVAL 1 MONTH) 
+4

+1不错的方法来检索上一个月的第一天没有字符串转换 – Andomar 2011-05-19 21:05:44

4
SELECT * 
FROM table 
WHERE date BETWEEN 
    ADDDATE(LAST_DAY(DATE_SUB(NOW(),INTERVAL 2 MONTH)), INTERVAL 1 DAY) 
    AND DATE_SUB(NOW(),INTERVAL 1 MONTH); 

的信息,请参阅the docsDATE_SUB,,LAST_DAY和其他有用的日期时间函数。

+0

编辑之后,看起来就像我接受的答案 – newyuppie 2011-05-20 00:29:03

8

这是有关您的问题一个MySQL日期操作的例子:

SELECT DATE_ADD(now() , INTERVAL -1 MONTH) 

以上将返回日期时间在一个月前

所以,你可以使用它,如下所示:

SELECT * 
FROM your_table 
WHERE Your_Date_Column BETWEEN '2011-01-04' 
    AND DATE_ADD(NOW(), INTERVAL -1 MONTH) 
2

你可以使用一个WHERE条款,如:

WHERE DateColumn BETWEEN 
    CAST(date_format(date_sub(NOW(), INTERVAL 1 MONTH),'%Y-%m-01') AS date) 
    AND 
    date_sub(now(), INTERVAL 1 MONTH) 
0

SELECT * FROM表WHERE myDtate从现在(),DATE_SUB(NOW(),间隔1个月)

18

获得一个月前很容易用一个MySQL的函数:

SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH); 

SELECT NOW() - INTERVAL 1 MONTH; 

关闭我的头顶,我想不出一个优雅的方式来获得上个月在MySQL的第一天,但​​是这肯定会工作:

SELECT CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01'); 

把它们放在一起,你会得到解决您的问题查询:

SELECT * 
FROM your_table 
WHERE t >= CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01') 
AND t <= NOW() - INTERVAL 1 MONTH 
+0

哇!我喜欢“上个月的第一天”! – realtebo 2014-01-29 11:10:05

-1

我的解决办法,以避免与您的编程语言编写SQL时,用一个字符串替代使用NOW()。如您所示,NOW()的问题包括当前时间。所以,从查询天(0小时和分钟)的开始拍摄,而不是:

r.date <= DATE_SUB(NOW(), INTERVAL 99 DAY) 

我做(PHP):

$current_sql_date = date('Y-m-d 00:00:00'); 

在SQL:

$sql_x = "r.date <= DATE_SUB('$current_sql_date', INTERVAL 99 DAY)" 

由此,您将从指定日期的午夜检索数据

+0

你可以尝试使用这样的事情当天'SELECT DAY(NOW());'和这昨天 'SELECT DAY(NOW() - 间隔1天);' – Federico 2013-10-24 14:00:48

14

简单代码请检查

SELECT * FROM table_name WHERE created <= (NOW() - INTERVAL 1 MONTH)