如何将当前周作为一系列日期过滤

时间:2014-09-05 10:30:17

标签: mysql date

您好我有一个MySQL数据库,我正在为研究日历设置一个表,字段如下:

SELECT
studycalendarpk,
studytopic,
`module`,
startdate,
enddate,
syllabusoutline
FROM studycalendar

我要做的是创建一个查询,以便对于仪表板php页面,它有一个查询,用于显示当前的周学习计划。有人可以告诉我如何设置查询来过滤它,以便在当前日期介于startdate和enddate之间时选择它,谢谢

3 个答案:

答案 0 :(得分:3)

您的表格中的每一行都有startdateenddate,如果我理解您的要求,您希望显示符合这些条件的所有行。

WHERE enddate >= start of week
  AND startdate < start of next week

您的表格中已有startdateenddate。这个答案假设每行的enddate被约束为大于或等于starttdate。如果不是,你会得到奇怪的结果。

您需要一个MySQL表达式来计算本周的第一天。这是你如何做到的。

FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -1, 7))

此表达式产生紧接CURDATE()之前的星期日。如果您的周被认为是星期一开始,请改用它(请注意-2)。

FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -2, 7))

这些是非常有用的表达式,因为它们产生实际日期。然后可以通过日期算法(例如somedate + INTERVAL 7 DAY)操纵这些日期,这样可以方便地在一周后给出日期。这种算法甚至适用于一个日历年的最后一周和第一周。

总而言之,您可以选择所需的记录。

WHERE enddate  >= FROM_DAYS(TO_DAYS(CURDATE())-MOD(TO_DAYS(CURDATE())-1,7))
  AND startdate < FROM_DAYS(TO_DAYS(CURDATE())-MOD(TO_DAYS(CURDATE())-1,7))
                   + INTERVAL 7 DAY

这将从您的表中获取与当前周相关的记录。

答案 1 :(得分:2)

SELECT *
FROM studycalendar
where curdate() between startdate and enddate

答案 2 :(得分:0)

你可以尝试一下吗?我们可以通过本周()方法获得一周的使用时间

SELECT
`studycalendarpk`,
`studytopic`,
`module`,
`startdate`,
`enddate`,
 CAST(week(now()) AS UNSIGNED)
syllabusoutline
FROM studycalendar WHERE CAST(week(now()) AS UNSIGNED) between CAST(week('2014-09-01') AS UNSIGNED) and CAST(week('2014-09-07') AS UNSIGNED)