表格中的周末事件在开始和结束日期之间

时间:2014-10-29 12:02:53

标签: mysql sql

我想从桌子上找到周末活动。表格包含日期和日期。

我写了一个查询,如果from和to date相等。即,

SELECT *
from table
where date_from < DATE_ADD(CURDATE(), INTERVAL 7 DAY) and
      (DAYOFWEEK(date_from) = 7 or DAYOFWEEK(date_from) = 1)

在周六或周日,开始日期和结束日期之间的查询是什么?

例如:

Start Date    End Date    Show/Don't Show
29-10-2014    30-10-2014  Don't Show
29-10-2014    03-11-2014  Show
03-11-2014    03-12-2014  Don't Show
29-10-2014    03-12-2014  Show
01-11-2014    01-11-2014  Show

1 个答案:

答案 0 :(得分:0)

如果您希望在下周六和周日(星期一的第一天是星期一)显示,您可以使用5 - Weekday(curdate())计算下周六的差异天数,并计算下周日的6 - Weekday(curdate())

所以:

SELECT *
from 
    my_table
where 
    DATE_ADD(CURDATE(), INTERVAL (7+5 - weekday(curdate()))%7 DAY) between date_from and date_to
or 
    DATE_ADD(CURDATE(), INTERVAL 6 - weekday(curdate()) DAY) between date_from and date_to

DEMO

<强>解释

Weekday返回0-6代表星期一到星期日

所以要到下周日(Weekday(aSunday)=6),只需要添加6 - weedday(curdate())天。

要获得下周六(Weekday(aSaturday)=5),需要考虑curdate是星期日,然后添加5 - 6将在昨天获得。因此,添加7和mod 7可以获得6,这将在下周六形成本周日。