在mysql中按月和年比较日期

Ume*_*thi 11 mysql sql

我有一个表格,其中包含有关活动和节日的数据,以下列记录了他们的开始和结束日期.

  • 开始日期
  • 结束日期

日期格式是YYYY-MM-DD.我需要使用以下条件获取事件详细信息.

  • 需要获取以当前月份开头的所有事件,并且结束日期可以是任何说法currentDate+next30days.

我很清楚结束日期的概念.但不确定如何获取其开始日期在当月的数据.为此,我需要将当前年份和当前月份与Start_Date我的数据库中的列进行比较.

任何人都可以帮我指出我怎么做到这一点?

jue*_*n d 20

select * from your_table
where year(Start_Date) = year(curdate())
and month(Start_Date) = month(curdate())
and end_date <= curdate() + interval 30 day
Run Code Online (Sandbox Code Playgroud)

  • 总是忘记`CURDATE()`函数`:]`,所以+1 (2认同)
  • @daVe:“now”返回日期和时间。`curdate` 仅是日期。 (2认同)

Gor*_*off 5

我不喜欢其他两个答案中的任何一个,因为他们不让优化器使用索引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)
Run Code Online (Sandbox Code Playgroud)

所有日期函数都打开curdate(),这不影响MySQL在这种情况下使用索引的能力.

您还可以将条件包括在end_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)
      ) and
      end_date <= date_add(curdate(), interval 30 day)
Run Code Online (Sandbox Code Playgroud)

这仍然可以利用索引.