Mysql 查询日期差异天数
Mysql queries for date difference in days
这里需要帮助,有一个 mysql table 叫做 APPROVAL,那里有一个 id,dateandtime
和 level, i
需要一个单独选择 id
和以下条件的查询。
单独从数据库中获取日期并将其与当前系统日期进行比较,如果天数超过 30 和低于 60 并且 level = 5
.
我如何为此编写查询。
提前致谢。
希望我正确理解了您的问题。
select `ID`
from APPROVAL
where `Level` = 5
and ( DATE(`DateTime`) > curdate() + interval 30 day
and DATE(`DateTime`) < curdate() + interval 60 day )
order by `ID` asc;
其中 DATE() gets the date from a datetime and CURDATE() 是当前系统日期。使用 interval
,您可以操作日期表达式而不必担心它的限制。
好的,所以使用此查询检索所有匹配级别 5 且与当前日期相比日期差异在 30 到 60 之间的 ID。
SELECT id
FROM APPROVAL
WHERE level = 5 && DATEDIFF(NOW(), dateandtime) BETWEEN 30 AND 60
我建议您也按日期 DESC 订购。
希望对您有所帮助
MySQL 具有良好的日期算法。例如,表达式
CURDATE() + INTERVAL 30 DAY
给出一个日期时间值,表示 30 天后的午夜。同样
CURDATE() + INTERVAL 61 DAY
在第 61 天的午夜生成。
所以查询形式
SELECT ID
FROM APPROVAL
WHERE Level = 5
AND `DateTime` >= CURDATE() + INTERVAL 30 DAY
AND `DateTime` < CURDATE() + INTERVAL 61 DAY
会产生你想要的。请注意使用 >=
作为天数范围的开始,使用 <
和额外的一天作为范围的结束。我们这样做是因为我们想要第 60 天的所有项目,以及第 61 天的 none。
(Level, DateTime)
上的复合索引将使此查询非常有效地满足。
注意像
这样的表达式
DATE(`DateTime`) <= CURDATE() + INTERVAL 60 DAY /* slow! */
也会产生正确的结果,但是对要搜索的列调用 DATE()
函数使其成为 unsargeable。即使得MySQL无法使用索引来满足搜索
这里需要帮助,有一个 mysql table 叫做 APPROVAL,那里有一个 id,dateandtime
和 level, i
需要一个单独选择 id
和以下条件的查询。
单独从数据库中获取日期并将其与当前系统日期进行比较,如果天数超过 30 和低于 60 并且 level = 5
.
我如何为此编写查询。
提前致谢。
希望我正确理解了您的问题。
select `ID`
from APPROVAL
where `Level` = 5
and ( DATE(`DateTime`) > curdate() + interval 30 day
and DATE(`DateTime`) < curdate() + interval 60 day )
order by `ID` asc;
其中 DATE() gets the date from a datetime and CURDATE() 是当前系统日期。使用 interval
,您可以操作日期表达式而不必担心它的限制。
好的,所以使用此查询检索所有匹配级别 5 且与当前日期相比日期差异在 30 到 60 之间的 ID。
SELECT id
FROM APPROVAL
WHERE level = 5 && DATEDIFF(NOW(), dateandtime) BETWEEN 30 AND 60
我建议您也按日期 DESC 订购。
希望对您有所帮助
MySQL 具有良好的日期算法。例如,表达式
CURDATE() + INTERVAL 30 DAY
给出一个日期时间值,表示 30 天后的午夜。同样
CURDATE() + INTERVAL 61 DAY
在第 61 天的午夜生成。
所以查询形式
SELECT ID
FROM APPROVAL
WHERE Level = 5
AND `DateTime` >= CURDATE() + INTERVAL 30 DAY
AND `DateTime` < CURDATE() + INTERVAL 61 DAY
会产生你想要的。请注意使用 >=
作为天数范围的开始,使用 <
和额外的一天作为范围的结束。我们这样做是因为我们想要第 60 天的所有项目,以及第 61 天的 none。
(Level, DateTime)
上的复合索引将使此查询非常有效地满足。
注意像
这样的表达式 DATE(`DateTime`) <= CURDATE() + INTERVAL 60 DAY /* slow! */
也会产生正确的结果,但是对要搜索的列调用 DATE()
函数使其成为 unsargeable。即使得MySQL无法使用索引来满足搜索