MySQL - 当时间戳是日期的一部分时,如何查找昨天的记录
Posted
技术标签:
【中文标题】MySQL - 当时间戳是日期的一部分时,如何查找昨天的记录【英文标题】:MySQL - How to find records for yesterday when timestamp is part of date 【发布时间】:2020-10-05 15:14:41 【问题描述】:我的 mysql 表存储带有日期/时间戳的记录。我想从昨天创建的表中查找记录(如创建日期为昨天 - 无论时间戳部分是什么)
下面是 db 记录的样子:
我尝试了以下选择(以及其他一些变体,但没有得到昨天日期的行。
SELECT m.meeting_id, m.member_id, m.org_id, m.title
FROM meeting m
WHERE m.create_dtm = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
不完全确定我需要如何构造 where 子句来获取昨天发生的会议 ID。任何帮助将不胜感激。
【问题讨论】:
您的查询只匹配昨天午夜的时间!你需要一个范围...... 【参考方案1】:一种天真的方法会将创建时间戳截断至今,然后进行比较:
where date(m.create_dtm) = current_date - interval 1 day
但是直接对时间戳使用半开间隔要高效得多:
where m.create_dtm >= current_date - interval 1 day and m.create_dtm < current_date
【讨论】:
非常感谢。我曾考虑过您的第一个建议,但很高兴有一种更有效的方法。非常感谢 GMB! ...带有适当的索引【参考方案2】:您可以尝试下一个查询:
SELECT
m.meeting_id, m.member_id, m.org_id, m.title, m.create_dtm
FROM meeting m
-- here we convert datetime to date for each row
-- it can be expensive for big table
WHERE date(create_dtm) = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
SELECT
m.meeting_id, m.member_id, m.org_id, m.title, m.create_dtm
FROM meeting m
-- here we calculate border values once and use them
WHERE create_dtm BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND DATE_SUB(CURDATE(), INTERVAL 1 SECOND);
这里是现场小提琴:SQLize.online
【讨论】:
以上是关于MySQL - 当时间戳是日期的一部分时,如何查找昨天的记录的主要内容,如果未能解决你的问题,请参考以下文章