使用datetime和php在mysql数据库中选择1、7和30天前的记录
Im使用以下查询来定位比当前时间早X天的结果使用datetime和php在mysql数据库中选择1、7和30天前的记录,sql,mysql,datetime,Sql,Mysql,Datetime,Im使用以下查询来定位比当前时间早X天的结果 SELECT *, DATE_FORMAT(datetime, '%m/%d/%Y') FROM table WHERE datetime BETWEEN SYSDATE() - INTERVAL 30 DAY AND SYSDATE() ORDER BY ID DESC 问题是,如果恰好30天前的记录不存在,它将返回当天的数据,以及不相关的数据 有更好的方法吗?您的查询
SELECT *,
DATE_FORMAT(datetime, '%m/%d/%Y')
FROM table
WHERE datetime BETWEEN SYSDATE() - INTERVAL 30 DAY
AND SYSDATE()
ORDER BY ID DESC
问题是,如果恰好30天前的记录不存在,它将返回当天的数据,以及不相关的数据
有更好的方法吗?您的查询设置为从今天(包括时间)到30天前获取记录 如果希望记录的时间超过30天(截止时间),请使用:
BETWEEN
包括两个参数之间的所有值,包括两端的值。换句话说,介于1和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()
返回一个没有时间组件的日期。如果通过一个无函数代码运行datetime列,则使用CURDATE是没有意义的,但是如果datetime
列上存在索引,则无法使用索引。第一个查询获取的所有内容>=30天。您可能希望使用>=获取今天、sysdate()和30天之间的所有内容。您需要使用=来获取正好30天前的信息。
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
SELECT *,
DATE_FORMAT(datetime, '%m/%d/%Y')
FROM table
WHERE DATE(datetime) = CURDATE() - INTERVAL 30 DAY
ORDER BY ID DESC