如何从MySQL表中获取前一天的记录?

7

我想从表中获取前一天的记录,但我不知道具体该怎么做。请帮忙解决。

表格:RECORD_DATA

id       creationDate    
1   | 2013-05-03 04:03:35 |    
2   | 2013-05-03 04:03:35 | 

现在我需要获取所有于2013年5月3日创建的记录,时间可以是任何时刻。因此我的查询应该使用LIKE操作符。
我正在使用以下查询,但它给出了空集:
select creationDate from RECORD_DATA 
where creationDate LIKE DATE_SUB(STR_TO_DATE('2012-04-05','%d/%m/%Y'),INTERVAL 1 DAY);
5个回答

25

使用SQL可以很简单地完成,只需添加条件即可。

WHERE creationDate BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE()

不需要转换creationDate,因为它已经是日期类型 :)。我相信这将是检查它的最快方式(如果涉及大数据集,则会很重要)。


2
根据https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_between的说明,我会添加`AND CURDATE() - INTERVAL 1 SECOND,因为它似乎使用min <= expr AND expr <= max`。 - Sdlion
2
这实际上并不准确,因为它还包括当前日期的记录,而不仅仅是前一天的记录。 - KoviNET

3
这里的答案似乎是回答“如何在过去24小时内找到某物?”,而不是“如何找到前一天的东西?”这是不同的问题。
如果您需要找到前一天的东西,您可以尝试:
select creationDate from RECORD_DATA 
where date(creationDate) = curdate() - INTERVAL 1 DAY;

无需将日期转换为字符串并进行字符串比较。

1
你可以使用


SELECT *
FROM `tableName`
WHERE DAY(created) = DAY(CURRENT_DATE - INTERVAL 1 DAY)

DAY 是 DAYOFMONTH 的别名。DAY('2016-02-01') = DAY('2016-03-01') = DAY('2016-04-01'),等等。详见 https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayofmonth。 - Aaron Luman

1
我认为这应该可以做到:

SELECT * FROM RECORD_DATA WHERE `creationDate` >= CURDATE()-1 and `creationDate` < CURDATE();

1
这将使用INDEXcreationDate上(如果有的话)。
SELECT  *
FROM    TableName
WHERE   creationDate >= CURDATE() - INTERVAL 1 DAY AND
        creationDate < CURDATE()

3
为什么不使用BETWEEN呢? - PeteGO
根据 https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_between,Between 相当于 min <= expr AND expr <= max 而不是 min <= expr AND expr < max - Sdlion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接