我有以下查询。
SELECT COUNT(*), WEEK(date), YEAR(date) FROM myTable GROUP ON YEAR(date), WEEK(date)
说它产生以下结果
32 33 2012
43 34 2012
39 35 2012
17 36 2012
我现在希望在2012年第35周获得所有39条记录。但是,我不希望在我的WHERE子句中使用WEEK(date)=35 AND YEAR(date)=2012
,因为它不使用索引。相反,我希望找到边界并使用条件。我也不想使用BETWEEN,因为可能会出现舍入错误。
$w=35;$y=2012; //Given
$w=sprintf('%02d',$w); //Make sure it is two digits
$date = new DateTime($y.'W'.$w);
$d1=$date->format('Y-m-d');
$date->add(new DateInterval('P1W'));
$d2=$date->format('Y-m-d');
$sql='SELECT * FROM myTable WHERE date >= ? AND date < ?';
答案 0 :(得分:12)
关于MySQL如何工作,你正走在正确的轨道上,拥有可以产生不同结果的周相关功能的各种模式。 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week
据我所知,MySQL模式相当于PHP的日期逻辑是模式3,即ISO周日期标准http://en.wikipedia.org/wiki/ISO_week_date
从星期一开始,周数和周数为1-53。
因此,您需要使用WEEK(date_field, 3)
来获取PHP兼容的值。
作为一种替代方法,我发现在您需要能够灵活查询不同日期范围或聚合(Q1-Q4,H1-H2等)或您可能需要利用的情况下,我发现了一件事PHP支持的不同周是在MySQL中使用日期帮助程序表(类似于数据仓库中可能用作日期维度表的表,如果您熟悉它)。它可以为您提供一个方便的表格来加入,以便查找日期范围。这样的事情应该有效:
http://databobjr.blogspot.com/2012/06/create-date-dimension-table-in-mysql.html