SELECT DATE(STR_TO_DATE(CONCAT(CONCAT(YEAR('$uDate1'), week), ' Monday'), '%X%V %W') +
INTERVAL (7 - DAYOFWEEK(STR_TO_DATE(CONCAT(CONCAT(YEAR('$uDate1'), week), ' Monday'),
'%X%V %W'))) DAY)
as week_end_date
这句话的作用是取我给它的日期( $ uDate1 )并给我那个星期的结束日期(星期六)。这很好用,我很高兴,有点。
我想知道是否有一些我错过的东西可以使这更有效率,或者即使我错过了一些捷径。
对我有什么建议吗?
week >= WEEK('$uDate1') AND week <= WEEK('$uDate2')
这是我的WHERE子句。所以基本上如果我用这个......
DATE('$uDate1', INTERVAL 7 - DAYOFWEEK('$uDate1') DAY)
...然后它返回所有记录的同一天。我需要能够持续几周。
我的数据库中有一个名为&#39;周&#39;的列。它只存储一个对应于一年中一周的INT。 (本周例如21)
然后我有两个日期选择器框。输出得到基于每周的周末日期,该日期是BETWEEN并包括所选日期。
5/10/2016&amp; 2016年5月26日输出 2016年5月14日,2016年5月21日,2016年5月28日
导出到CSV文件的内容看起来像这样..
WEEK END, LAST NAME, FIRST NAME, ...
5/10/2016, Smith, John, ...
5/26/2016, Jones, James, ...
它会输出在一周内有几个小时的人,以及周结束日期。
SIDE注意:我非常感谢您的评论和帮助。我不希望任何人对此施加压力!只是好奇如果更好的方式。 :)
答案 0 :(得分:0)
正如我在评论中提到的,你应该将这种转换从mysql查询转移到php代码。
我认为没有理由在mysql端进行此计算。
$week_day = intval(date('w',$uDate1));
if ($week_day<6) {
$end_of_week = $uDate1+(86400*(6-$week_day));
} else {
$end_of_week = $uDate1;
}
答案 1 :(得分:0)
我不确定你当前的SQL为何如此复杂。
你说只是为了约会,并给我那周的周末日期(星期六)。
目前你是如何做到这一点的: -
我的建议是使用: -
DATE_ADD($uDate1, INTERVAL 7 - DAYOFWEEK($uDate1) DAY)
这简单得多,似乎可以满足您的要求。
修改
查看您的编辑内容,您需要所有星期六的列表全部或部分在两个通过日期之间。
如果是这样的话,我认为以下内容会做到并且希望更高效,因为不需要将日期转换为字符串。请注意,它依赖于您的周表添加到日期,因此只能处理最多几周的日期范围。
SELECT DATE_ADD(DATE_ADD('$uDate1', INTERVAL 7 - DAYOFWEEK('$uDate1') DAY), INTERVAL `week` WEEK) AS aDate
FROM `week`
HAVING aDate BETWEEN '$uDate1' AND DATE_ADD('$uDate2', INTERVAL 7 - DAYOFWEEK('$uDate2') DAY)
ORDER BY aDate