我有一个字段date_purchased
和date_ordered
,它们是日期时间字段。如果产品是在订购后购买的,如果购买时间提前2天或订购后7天,我需要获取记录:
if(date_purchased>date_ordered)
{
if(date_purchased>(today-2) or date_puchased<(date_ordered+7))
}
基本上,我如何将上面的代码翻译成mysql where condition(嵌套和/或)?
答案 0 :(得分:5)
使用DATE_SUB()
and DATE_ADD()
将日期添加到日期时间字段。这两个日期比较包含在()
中,作为AND
的单个组件。
WHERE
date_purchased > date_ordered
AND (
date_purchased > DATE_SUB(NOW(), INTERVAL 2 DAY)
OR date_purchased < DATE_ADD(date_ordered, INTERVAL 7 DAY)
)
注意如果这些字段是DATETIME
字段而不是DATE
字段,您可能希望使用DATE()
删除时间部分,以便日期比较开始在当天的开始,而不是从当前时间开始的24小时间隔。这也意味着使用CURDATE()
代替NOW()
来获取今天的日期而不是时间戳。
WHERE
date_purchased > date_ordered
AND (
DATE(date_purchased) > DATE_SUB(CURDATE(), INTERVAL 2 DAY)
OR DATE(date_purchased) < DATE_ADD(DATE(date_ordered), INTERVAL 7 DAY)
)
答案 1 :(得分:0)
使用BETWEEN运算符选择间隔。
在* date-2 AND * date + 7
之间答案 2 :(得分:0)
SELECT * FROM your_table
WHERE date_purchased > date_ordered
AND (DATE_DIFF(date_purchased, date_ordered) > 2
OR DATE_DIFF(date_purchased, date_ordered) < -7)