使用datetime和php从1天,7天和30天前选择mysql db中的记录

时间:2010-07-19 17:22:44

标签: sql mysql datetime

我使用以下查询来定位比当前时间早X天的结果。

SELECT  *,
        DATE_FORMAT(datetime, '%m/%d/%Y') 
   FROM table 
  WHERE datetime BETWEEN SYSDATE() - INTERVAL 30 DAY 
                     AND SYSDATE() 
ORDER BY ID DESC

如果30天前的记录不存在,以及无关数据,问题是它从当天返回的数据

有更好的方法吗?

2 个答案:

答案 0 :(得分:29)

BETWEEN包括两个参数之间的所有值,包括每端的值。换句话说,BETWEEN 1 AND 4包括值1,2,3和4.不仅仅是1和4,而不仅仅是2和3。

如果您只想要30天前的某一天的日期,请尝试:

SELECT  *,
        DATE_FORMAT(datetime, '%m/%d/%Y') 
   FROM table 
  WHERE DATE(datetime) = CURDATE() - INTERVAL 30 DAY 
ORDER BY ID DESC

使用CURDATE()代替SYSDATE(),因为CURDATE()会返回没有时间组件的日期。

答案 1 :(得分:10)

您的查询设置为获取今天(包括时间)和之前30天之间的记录。

如果您想要超过30天(到时间)的记录,请使用:

  SELECT *,
         DATE_FORMAT(datetime, '%m/%d/%Y') 
    FROM table 
   WHERE datetime <= DATE_SUB(SYSDATE(), INTERVAL 30 DAY)
ORDER BY ID DESC

如果您想要那些只有30天,而不是31或29,而不考虑时间部分 - 使用:

  SELECT *,
         DATE_FORMAT(datetime, '%m/%d/%Y') 
    FROM table 
   WHERE DATE_FORMAT(datetime, '%m/%d/%Y') = DATE_FORMAT(DATE_SUB(SYSDATE(), INTERVAL 30 DAY), '%m/%d/%Y') 
ORDER BY ID DESC