我需要一些幫助來編寫MySQL查詢來顯示上個月的行,但不是整個月,只有直到同一天,小時和分鐘,因爲它是現在(),但1個月前。因此,例如,如果今天是5/19在下午5:25,我需要從午夜12:00 am 4/1到下午5:25 pm(當然也是同一年)從午夜12:00選擇行。MySQL從上個月直到(現在() - 1個月)選擇所有行,用於比較目的
謝謝!
我需要一些幫助來編寫MySQL查詢來顯示上個月的行,但不是整個月,只有直到同一天,小時和分鐘,因爲它是現在(),但1個月前。因此,例如,如果今天是5/19在下午5:25,我需要從午夜12:00 am 4/1到下午5:25 pm(當然也是同一年)從午夜12:00選擇行。MySQL從上個月直到(現在() - 1個月)選擇所有行,用於比較目的
謝謝!
可以拿到第一個月,由之前計算每月的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)
這是有關您的問題一個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)
你可以使用一個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)
SELECT * FROM表WHERE myDtate從現在(),DATE_SUB(NOW(),間隔1個月)
獲得一個月前很容易用一個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
哇!我喜歡「上個月的第一天」! – realtebo 2014-01-29 11:10:05
我的解決辦法,以避免與您的編程語言編寫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)"
由此,您將從指定日期的午夜檢索數據
你可以嘗試使用這樣的事情當天'SELECT DAY(NOW());'和這昨天 'SELECT DAY(NOW() - 間隔1天);' – Federico 2013-10-24 14:00:48
簡單代碼請檢查
SELECT * FROM table_name WHERE created <= (NOW() - INTERVAL 1 MONTH)
+1不錯的方法來檢索上一個月的第一天沒有字符串轉換 – Andomar 2011-05-19 21:05:44