Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找上周日到下周日的事件_Mysql_Sql - Fatal编程技术网

Mysql 查找上周日到下周日的事件

Mysql 查找上周日到下周日的事件,mysql,sql,Mysql,Sql,如何查找本周和下周日的MySQL数据 给定一个日期,例如11年5月18日星期三,它将显示从前一个星期日到下一个星期日的事件。2011年5月15日至2011年5月22日 诀窍是找到给定日期的“前一个”周日 如何做到这一点?摘自奔腾的答案,并做了一些调整 SELECT * FROM events WHERE Yearweek(`eventdate`) = Yearweek(NOW()) OR ( Weekday(NOW()) = 6 AND Y

如何查找本周和下周日的MySQL数据

给定一个日期,例如11年5月18日星期三,它将显示从前一个星期日到下一个星期日的事件。2011年5月15日至2011年5月22日

诀窍是找到给定日期的“前一个”周日


如何做到这一点?

摘自奔腾的答案,并做了一些调整

SELECT * 
FROM   events 
WHERE  Yearweek(`eventdate`) = Yearweek(NOW()) 
        OR ( Weekday(NOW()) = 6 
             AND Yearweek(`eventdate`) = Yearweek( 
                 DATE_SUB(NOW(), INTERVAL 1 DAY)) ) 
SELECT
    *
FROM
    Events
WHERE
    YEARWEEK(`eventdate`) = YEARWEEK(NOW()) OR
    (
        WEEKDAY(`eventdate`) = 6 AND
        YEARWEEK(`eventdate`) = YEARWEEK(NOW()) + 1
    )
这可能需要根据工作日为6星期日?的值进行调整


此外,虽然这应该可以工作,但我猜mySQL将无法使用此方法在eventdate列上使用任何索引。最好自己找出临近星期天的实际日期,然后在or=之间进行比较。这应该允许在eventdate上使用索引。即使现在没有索引,将来也可能需要使用索引。

使用日历表

select cal_date
from calendar
where cal_date between 
                 (select max(cal_date) from calendar
                  where cal_date <= '2011-05-15' and day_of_week = 'Sun') and
                 (select min(cal_date) from calendar
                  where cal_date > '2011-05-15' and day_of_week = 'Sun') 
如果给定的日期是星期天,则不清楚您想要什么。前面的查询返回15行,给定的日期是星期天。它返回所有其他日期的8行。可以调整WHERE子句中的比较运算符以获得所需的行为


我早些时候发了一封信。这是针对PostgreSQL的,但您应该能够轻松地将其应用于MySQL。

如果范围应该包括两个星期天,那么我相信您也需要考虑这一点。@Tom这就是为什么我在那里有OR子句。我手头没有MySQL DB,但OR只有在某一天生效。我不认为在所有情况下,这将返回8天的范围。如果工作日现在是6天,那么你只有一周的约会。我想你需要一个关于工作日的OR。