MySQL日期是在上个星期一和下一个星期日之间

时间:2016-06-10 21:09:55

标签: mysql

我希望找到所有在MySQL上一个星期一和下一个星期日之间有预订日期的记录。

到目前为止,我有:

SELECT firstname
     , lastname
     , sessions
     , (SELECT COUNT(memberid) 
          FROM bookings
         WHERE m.memberid = b.memberid  
            and b.date between lastMonday and nextSunday) as sessionsused 
  from members

我正在寻找替代上一个星期和nextsunday

的内容

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

MySQL的YEARWEEK()函数为每周选择一个唯一值,您可以将其用于比较。它需要a second parameter来指定周是从周日(0)还是周一(1)开始。

SELECT COUNT(memberid) 
FROM bookings
WHERE m.memberid = b.memberid  
AND YEARWEEK(b.date, 1) = YEARWEEK(NOW(), 1);

这将始终选择本周b.date所在的行。对于过去的特定周,请更改NOW()以获取所需的日期表达式。

对于更常见的情况,即你的周没有在周日或周一开始,你需要一些稍微复杂的逻辑。在这里,您将@weekday替换为您的周开始的日期,2 =周二,3 =周三,4 =周四,5 =周五,6 =周六。

SELECT COUNT(memberid) 
FROM bookings
WHERE m.memberid = b.memberid  
AND DATE(b.date)
    BETWEEN DATE_SUB(DATE(NOW()), INTERVAL (WEEKDAY(NOW()) - @weekday + 7) % 7 DAY)
        AND DATE_ADD(DATE(NOW()), INTERVAL 6 - (WEEKDAY(NOW()) - @weekday + 7) % 7 DAY);