我想从桌子上找到周末活动。表格包含日期和日期。
我写了一个查询,如果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
答案 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
<强>解释强>
Weekday
返回0-6代表星期一到星期日
所以要到下周日(Weekday(aSunday)=6
),只需要添加6 - weedday(curdate())
天。
要获得下周六(Weekday(aSaturday)=5
),需要考虑curdate是星期日,然后添加5 - 6
将在昨天获得。因此,添加7和mod 7可以获得6,这将在下周六形成本周日。