1

我正在使用

 WHERE WEEK(curdate,3)-WEEK(date)=1 

获取在最后一个工作周(周一至周日)记录的表的所有行。全年运行良好,但在一月份会在一段时间内返回 0,所以我必须采取

 WHERE WEEK(curdate,3)+53-WEEK(date)

在这种情况下。我不能使用OR,因为当两者都存在时,它将同时使用当前年份信息和去年信息。我已经尝试过COALESCEIFNULL方法:

 WHERE COALESCE(
     (WEEK(curdate(),3)-WEEK(date,3) = 1),
     (WEEK(curdate(),3)+53-WEEK(date,3) = 1
 )

它全年运作良好,但在IFNULL真实情况下无法处理。请给我关于如何有效处理此案的建议。

4

1 回答 1

0

您可以使用以下方法获取本周星期一的日期:

select SUBDATE(curdate(), WEEKDAY(curdate()));

然后在谓词中使用本周星期一和前一周星期一的日期:

WHERE date >= SUBDATE(curdate(), WEEKDAY(curdate())) - interval 1 week
AND date < SUBDATE(curdate(), WEEKDAY(curdate()))
于 2013-03-01T10:56:40.140 回答