选择日期在当前周内的 SQL 项


Select SQL item with date within current week

我们有一个电影数据库,需要选择本周内有开始和结束日期的电影。我们在 SQL 表中有两列,都是"date"类型,并以 2015-01-25 (ISO)(YYYY-MM-DD) 格式编写。我们需要选择本周内发生的条目。电影的开始日期通常是一周的星期五,结束日期通常是一周的星期日。我希望能够展示即将到来的周末即将上映的电影是什么,无论他们检查一周中的哪一天。我已经编写了以下 PHP 和 SQL 查询,但是当我回显$result时,我没有返回任何数据。

$date = strtotime("now");
$last = strtotime('next Sunday');
$date = date('Y-m-d',$date);
$last = date('Y-m-d',$last);
$result = mysql_fetch_array(mysql_query("SELECT * FROM campusFilms WHERE startDate BETWEEN $date AND $last"));
任何

帮助将不胜感激,我很乐意详细说明任何需要的东西。我已经搜索了其他StackOverflow问题,但没有一个完全回答了这个特定案例。

SELECT * 
  FROM campusFilms 
 WHERE WEEK('2015-02-05') BETWEEN WEEK(startDate) AND WEEK(endDate);

http://sqlfiddle.com/#!2/476d3/3

此解决方案不能使用索引,因此,如果性能存在问题,我们可以查看替代解决方案。

为什么不直接使用 YEARWEEK()

SELECT whatever_you_need 
FROM campusFilms 
WHERE YEARWEEK(CURDATE()) BETWEEN YEARWEEK(startDate) AND YEARWEEK(endDate);

年周 返回将处理多个年份的任何给定日期的年份和周。

如果你关心的只是找到startdate在本周的星期五和星期日之间的记录,那么你甚至不需要使用 PHP 来计算日期,你可以让 mysql 为你完成所有的工作:

SELECT *
  FROM campusFilms
 WHERE startDate BETWEEN
       DATE_ADD(CURDATE(), INTERVAL(-2 + MOD(8-DAYOFWEEK(CURDATE()),7)) DAY)
       AND
       DATE_ADD(CURDATE(), INTERVAL(MOD(8-DAYOFWEEK(CURDATE()),7)) DAY)

无论今天是一周中的哪一天,这都有效。 如果是星期五,它会在今天和后天之间给你看电影。 周六,它会给你昨天到明天之间的电影,周日,它会给你两天前到今天的电影。