我有一个表(名为 tasks
),其列 created_at
基本上包含 UNIX 时间戳。
我只需要选择那些在指定时间间隔内创建的结果。
时间间隔为今天
、明天
、本周
和本月
。
我认为如果我将时间戳转换为 YYYY-MM-DD HH:MM:SS
格式,MySQL 可以处理它。
此外,我认为我也需要在那里使用 BETWEEN
。
所以,我传递时间戳来查询和比较(检查?)它是否在指定的时间间隔内与存储在数据库中的时间戳。要转换,我需要使用 FROM_UNIXTIME
,对吗?
如何指定这些间隔?感谢您的建议!
最佳答案
您需要转换 UNIX_TIMESTAMP。
查询
SELECT * FROM tasks
WHERE created_at BETWEEN UNIX_TIMESTAMP(DATE_SUB(now(),INTERVAL 1 DAY))
AND UNIX_TIMESTAMP(now())
您可以通过以下方式更改周、月等的间隔:
INTERVAL 1 WEEK
INTERVAL 1 MONTH
INTERVAL 1 YEAR
MySQL 会自动考虑月份和闰年等的长度。
在上面的查询中,MySQL 将可以使用索引,从而加快速度。
确保不在您的列上使用函数,因为在那种情况下 MySQL 无法在该字段上使用索引,从而导致严重的缓慢。
编码恐怖,很慢
SELECT * FROM tasks
WHERE FROM_UNIXTIME(created_at) BETWEEN DATE_SUB(now(),INTERVAL 1 DAY)
AND now()
参见:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
关于mysql - 如何比较 MySQL 中的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7915667/