首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在当前周内选择带有日期的SQL项。

问在当前周内选择带有日期的SQL项。
EN

Stack Overflow用户
提问于 2015-01-22 19:59:44
回答 3查看 2.7K关注 0票数 2

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

代码语言:javascript
复制
$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问题,但没有一个完全回答这个具体的案例。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-23 18:01:44

为什么不直接使用YEARWEEK()呢?

代码语言:javascript
复制
SELECT whatever_you_need 
FROM campusFilms 
WHERE YEARWEEK(CURDATE()) BETWEEN YEARWEEK(startDate) AND YEARWEEK(endDate);

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

票数 2
EN

Stack Overflow用户

发布于 2015-01-22 20:49:02

代码语言:javascript
复制
SELECT * 
  FROM campusFilms 
 WHERE WEEK('2015-02-05') BETWEEN WEEK(startDate) AND WEEK(endDate);

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

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

票数 3
EN

Stack Overflow用户

发布于 2015-01-22 20:19:09

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

代码语言:javascript
复制
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)

不管今天是哪一天,这都是可行的。如果是星期五,它会给你从今天到后天的电影。星期六,它会给你昨天到明天的电影,周日的电影,两天前到今天的电影。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28097594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档