MySQL 是一个关系型数据库管理系统,广泛用于存储和管理数据。获取昨天的数据通常涉及到日期和时间的处理。
获取昨天数据的方法主要有以下几种:
获取昨天数据的应用场景包括但不限于:
假设我们有一个名为 logs
的表,其中有一个 created_at
字段记录了数据的创建时间。
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
AND created_at < CURDATE();
SELECT *
FROM logs
WHERE created_at >= CONCAT(CURDATE() - INTERVAL 1 DAY, ' 00:00:00')
AND created_at < CONCAT(CURDATE(), ' 00:00:00');
SELECT *
FROM logs
WHERE created_at BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND CURDATE();
原因:可能是由于时区设置不正确,导致日期计算出现偏差。
解决方法:
CONVERT_TZ
函数进行时区转换。SELECT *
FROM logs
WHERE CONVERT_TZ(created_at, @@session.time_zone, '+08:00') >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
AND CONVERT_TZ(created_at, @@session.time_zone, '+08:00') < CURDATE();
原因:可能是由于索引缺失或数据量过大。
解决方法:
created_at
字段上有索引。-- 添加索引
ALTER TABLE logs ADD INDEX idx_created_at (created_at);
-- 分页查询
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
AND created_at < CURDATE()
LIMIT 10 OFFSET 0;
通过以上方法,可以有效地获取昨天的数据,并解决常见的查询问题。
领取专属 10元无门槛券
手把手带您无忧上云