2012-01-11 28 views
0

我有以下查詢:如何檢查當前日期和其他日期是否超過1個月前?

$data = mysql_fetch_array(mysql_query("SELECT 
c.`id` AS cid, 
p.`id` AS pid,p.`email` 

FROM `coupons` AS c 
LEFT JOIN `coupons_partners` AS cp ON cp.`cid` = c.`id` 
LEFT JOIN `partners` AS p ON p.`id` = cp.`pid` 
LEFT JOIN `bills` AS b ON b.`pid` = p.`id` 

WHERE 
( 
    CURRENT_DATE() BETWEEN c.`expires` AND ADDDATE(c.`expires`, INTERVAL 1 MONTH) 
) 
OR 
( 
    CURRENT_DATE() NOT BETWEEN c.`expires` AND ADDDATE(c.`expires`, INTERVAL 1 MONTH) 
    AND 
    CURRENT_DATE() BETWEEN b.`date` AND ADDDATE(b.`date`, INTERVAL 1 MONTH) 
) 
ORDER BY b.`id` DESC"));  

它有點凌亂。我想做一個cronjob並自動創建賬單。只有在優惠券到期1個月後才能創建(c。expiresDATETIME),或者如果最後一個帳單(b。date)是在1個月前創建的。 也是,如果優惠券尚未開始,我不想創建任何賬單。這是可能的,因爲我創建了可能會在3個月內開始的優惠券。所以我想「解決方案間」不適合這裏?

我想弄明白它是否正確,但現在我會很感激任何幫助。

如果有人能幫助我,我會很高興也很感激。

最好的問候,

亞歷

回答

0

使用DATEDIFF

SELECT DATEDIFF(month, '2000-02-10','2000-01-10'); 

產量1,因爲02-10爲一個月01-10

一個月後可以更改爲取而代之的天數。

參考:http://www.1keydata.com/sql/sql-datediff.html

UPDATE: 在MSQL你可以使用DATEDIFF,因爲它可以一個月作爲參數傳遞,MySQL的版本只返回天。在MySQL中,您可以改爲使用PERIOD_DIFF雖然它不知道每個月的確切天數。

PERIOD_DIFF(P1,P2)

「返回時段P1和P2,P1和P2之間的月應在格式YYMM或YYYYMM的數量。注意週期參數P1和P2不是日期值。「

mysql> SELECT PERIOD_DIFF(200802,200703); 
     -> 11 

如果您需要知道究竟有多少個月不同,您需要進行多步計算。要找出一個月內的天數,您可以使用LAST_DAY函數,並從結果中提取日期部分並用作進一步計算的基礎。

LAST_DAY('2003-02-05'); 
     -> '2003-02-28' 
+0

我想'DATEDIFF(月,CURRENT_DATE(),c.expires)',但他不喜歡'CURRENT_DATE()'。你知道我應該把這個日期放在那裏嗎? – Vay 2012-01-11 17:47:25

+0

我猜你不是指MySQL?因爲就像在MySQL紀錄片中一樣,只允許兩個表達式。所以我可以用'DATEDIFF(CURDATE(),c.expires)'得到這些日子,但不是一個月,輸出爲1。無論如何,這不是可能將其轉換爲MySQL月嗎? – Vay 2012-01-11 21:45:30

相關問題