2011-05-19 21 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)