在mysql中按月份和年份比较日期
我有一个表,其中包含有关活动和节日的数据,以下列记录了它们的开始和结束日期 开始日期 结束日期 日期格式为YYYY-MM-DD。我需要获取具有以下条件的事件详细信息 需要获取以当前月份开始的所有事件,并且这些事件的结束日期可以是currentDate+Next30天。 我很清楚结束日期的概念。但我不确定如何获取开始日期在当前月份的数据。 为此,我需要将当前年份和当前月份与数据库中的“开始日期”列进行比较 有人能帮我指出我该怎么做吗?你是朋友吗:在mysql中按月份和年份比较日期,mysql,sql,Mysql,Sql,我有一个表,其中包含有关活动和节日的数据,以下列记录了它们的开始和结束日期 开始日期 结束日期 日期格式为YYYY-MM-DD。我需要获取具有以下条件的事件详细信息 需要获取以当前月份开始的所有事件,并且这些事件的结束日期可以是currentDate+Next30天。 我很清楚结束日期的概念。但我不确定如何获取开始日期在当前月份的数据。 为此,我需要将当前年份和当前月份与数据库中的“开始日期”列进行比较 有人能帮我指出我该怎么做吗?你是朋友吗: SELECT * FROM `ev
SELECT
*
FROM
`event`
WHERE
(MONTH(NOW()) = MONTH(`Start_Date`))
AND
(`End_Date` <= (NOW() + INTERVAL 30 DAY))
AND
(YEAR(NOW()) = YEAR(`Start_Date`))
我不喜欢其他两个答案中的任何一个,因为它们不允许优化器在开始日期使用索引。为此,函数需要位于当前日期端 因此,我会选择:
where start_date >= date_add(curdate(), interval 1 - day(curdate()) day) and
start_date < date_add(date_add(curdate(), interval 1 - day(curdate()) day), interval 1 month)
这仍然可以利用指数。分别比较年份和月份会让人感觉混乱。我想把它写在一行里。我怀疑它会在表现上产生明显的差异,所以这纯粹是个人偏好
select * from your_table
where LAST_DAY(Start_Date) = LAST_DAY(curdate())
and end_date <= curdate() + interval 30 day
总是忘记CURDATE函数:),所以+1我认为现在更容易记住。@daVe:现在返回日期和时间。curdate只显示日期。@juergen:没错,但是在这样的查询中,您会得到类似的结果,请注意比较!感谢您提供快速解决方案+1
where (start_date >= date_add(curdate(), interval 1 - day(curdate()) day) and
start_date < date_add(date_add(curdate(), interval 1 - day(curdate()) day), interval 1 month)
) and
end_date <= date_add(curdate(), interval 30 day)
select * from your_table
where LAST_DAY(Start_Date) = LAST_DAY(curdate())
and end_date <= curdate() + interval 30 day
where DATE_FORMAT(Start_Date ,'%Y-%m-01') = DATE_FORMAT(curdate(),'%Y-%m-01')