2011-04-04 56 views

回答

4

你首先得把最后一个星期一多少天前是使用DAYOFWEEK功能,然后减去即从当前日期 -

SELECT * from table 
WHERE date >= DATE_SUB(CURDATE(),INTERVAL MOD(DAYOFWEEK(CURDATE())-2,7) DAY) 
AND date <= DATE_ADD(CURDATE(), INTERVAL MOD(7 - (DAYOFWEEK(CURDATE()) - 1), 7) DAY) 

我不是百分之百肯定在这里的+/-数字,你应该能够从第是虽然

编辑:如果这将永远只能在星期天在周期结束时运行,还有一个更简单的版本 -

SELECT * from table 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 6 DAY) 
AND date <= CURDATE() 
+0

@tobyodavies:谢谢你的帮助。如果我想从上周一到周日取数据,可以做些什么? – 2011-04-04 10:29:13

+0

它基本上是相同的过程,但它会是'<='和'date_add(...,7 - MOD(DAYOFWEEK(...) - 1,7)...' – tobyodavies 2011-04-04 10:32:17

+0

嘿没有完全得到它如果你可以编辑你的答案并将它放在那里,这将是非常好的。另外我不清楚CURDATE()在这种情况下到哪里去了?对不起,我是这个MySQL的一个完整的新手。 – 2011-04-04 10:34:13

-1

你总是可以使用函数之间在查询......

SELECT * 
FROM orders 
WHERE order_date between to_date ('2003/01/01', 'yyyy/mm/dd') 
AND to_date ('2003/12/31', 'yyyy/mm/dd'); 

http://www.techonthenet.com/sql/between.php

+0

感谢输入但这不会适用于我的情况,因为我的日期不固定。我只想从上一个星期一到今天提取日期。我不知道上个星期一是什么日期。这不是一次性过程。所有日期将每周提取一次,以便我可以静态传递日期。可以做什么? – 2011-04-04 10:25:55

2

试试这个

select * from table 
WHERE date >date_sub(curdate(), interval WEEKDAY(curdate()) day) ; 
+0

对我而言最佳答案。我不得不花一点时间来理解为什么这会起作用,但它工作得很好 – Mollo 2015-10-09 00:03:34

相关问题