如何设置SQL以查找从上周日到本周日的记录(1周)

Par*_*roX 5 mysql sql date intervals

这与我现在的相似,即:

SELECT COUNT(author) FROM `posts` WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK) AND author='FooBar'

这将给我一个作者在过去一周内发布的次数.

如果我要在周日下午5:30运行该程序来查找上周日中午12:00至本周日中午12:00的帖子,我想反而拥有它.同样地,如果我忘了在星期天运行它,现在是星期一.我仍然希望它从上周日中午12:00到凌晨12点的周日运行

编辑:

我已经完成了我需要使用PHP来形成正确的SQL语句,但我仍然很好奇如何在SQL中执行此操作.

<?php
    $dayofweek = strftime("%A",time());
    if($dayofweek == "Sunday") {
        $last_sunday = date('Y-m-d h:i:s',strtotime('Last Sunday'));
        $this_sunday = date('Y-m-d h:i:s',strtotime('Sunday'));
    } else {
        $last_sunday = date('Y-m-d h:i:s',strtotime('Last Sunday',strtotime('Last Sunday')));
        $this_sunday = date('Y-m-d h:i:s',strtotime('Last Sunday'));
    }
    print "last_sunday={$last_sunday}<br>";
    print "this_sunday={$this_sunday}<br>";
    print "SELECT COUNT(author) FROM `posts` WHERE `date` <= '$this_sunday' AND `date` >= '$last_sunday' AND author='FooBar'";
?>
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 16

要获得最新的前一个星期天午夜,这应该这样做.NOW()用您的日期时间替换这两个实例以检查另一个日期.

SELECT DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 DAY) latest_sun
Run Code Online (Sandbox Code Playgroud)

要提前一周获得周日,请改用DAYOFWEEK(NOW())+6 DAY.

编辑:这是你的查询;

SELECT COUNT(author)
FROM `posts` 
WHERE author='FooBar'
  AND `date` >= DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())+6 DAY)
  AND `date` <  DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 DAY)
Run Code Online (Sandbox Code Playgroud)

  • @SagarGuhe`DAYOFWEEK`在周日返回1,在星期一返回2,依此类推.查询从该值中减去1,其中0表示星期日,1表示星期一,依此类推.它然后从今天的日期减去很多天以找到最后一个星期日(如果它已经是星期天,那么它将减去0天,如果它是星期一减去1天等)有意义吗? (3认同)