我有一个表格,其中包含有关活动和节日的数据,以下列记录了他们的开始和结束日期.
日期格式是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)
我不喜欢其他两个答案中的任何一个,因为他们不让优化器使用索引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)
这仍然可以利用索引.
| 归档时间: |
|
| 查看次数: |
28098 次 |
| 最近记录: |