如何编写这个mysql where子句?

时间:2012-04-27 13:08:07

标签: mysql

我有一个字段date_purchaseddate_ordered,它们是日期时间字段。如果产品是在订购后购买的,如果购买时间提前2天或订购后7天,我需要获取记录:

if(date_purchased>date_ordered)
{
    if(date_purchased>(today-2) or date_puchased<(date_ordered+7))
} 

基本上,我如何将上面的代码翻译成mysql where condition(嵌套和/或)?

3 个答案:

答案 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)