如何在MySQL中比较日期?
我创建了一个表(名为如何在MySQL中比较日期?,mysql,datetime,date,time,intervals,Mysql,Datetime,Date,Time,Intervals,我创建了一个表(名为tasks),表中的列基本上包含UNIX时间戳 我只需要选择那些在指定时间间隔内创建的结果 间隔时间为今天,明天,本周和本月 我认为如果我将时间戳转换为YYYY-MM-DD HH:MM:SS格式,MySQL可以处理它 另外,我认为我也需要在那里使用 因此,我传递时间戳来查询并比较(检查?)它是否在指定的时间间隔内,以及存储在数据库中的时间戳。要转换,我需要使用来自UNIXTIME的,对吗 如何指定这些间隔?谢谢你的建议 您需要转换UNIX\u时间戳 质疑 您可以通过以下操作更
tasks
),表中的列基本上包含UNIX时间戳
我只需要选择那些在指定时间间隔内创建的结果
间隔时间为今天
,明天
,本周
和本月
我认为如果我将时间戳转换为YYYY-MM-DD HH:MM:SS
格式,MySQL可以处理它
另外,我认为我也需要在那里使用
因此,我传递时间戳来查询并比较(检查?)它是否在指定的时间间隔内,以及存储在数据库中的时间戳。要转换,我需要使用来自UNIXTIME的,对吗
如何指定这些间隔?谢谢你的建议 您需要转换UNIX\u时间戳
质疑
您可以通过以下操作更改周、月等的间隔:
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()
请参阅:您需要转换UNIX\u时间戳
质疑
您可以通过以下操作更改周、月等的间隔:
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()
请参阅:我想创建的时间被定义为INT,您可以在其中存储时间戳。那么,比如说今天,最好的方式就是:
在UNIX时间戳(CURDATE())和UNIX时间戳(CURDATE()+间隔1天)之间创建
注:以下各项也适用:
从CURDATE()和(CURDATE()+间隔1天)之间的UNIXTIME(创建时间)
,但您可能没有机会让MySQL使用列索引。对于周/月,您需要一个更复杂的逻辑,带有week()和month()内置函数(以获取当前周/月的第一秒的时间戳)。我猜created_at定义为INT,您可以在其中存储时间戳。那么,比如说今天,最好的方式就是:
在UNIX时间戳(CURDATE())和UNIX时间戳(CURDATE()+间隔1天)之间创建
注:以下各项也适用:
从CURDATE()和(CURDATE()+间隔1天)之间的UNIXTIME(创建时间)
,但您可能没有机会让MySQL使用列索引。对于周/月,您需要一个更复杂的逻辑,带有week()和month()内置函数(以获取当前周/月第一秒的时间戳)。没问题,只需简单的输入:)谢谢,Johan。例如,这个月怎么样?我需要放多少作为间隔?30?间隔7天
,间隔1个月
(处理31/29/28天的月份),间隔1年
(处理闰年),都可以。没问题,只需简单的键入:)谢谢,约翰。例如,这个月怎么样?我需要放多少作为间隔?30?间隔7天
,间隔1个月
(考虑31/29/28天的月份),间隔1年
(考虑闰年),所有这些都将起作用。