-1

我的日期字段 ( artists.onlineDate) 是 yyy-mm-dd hh:mm:ss

现在我得到了:

-- Today
SELECT * FROM artists WHERE DATE(artists.onlineDate) = CURDATE()
-- Current Week
SELECT * FROM artists WHERE WEEK(artists.onlineDate, 3) = WEEK(CURDATE(), 3)
-- Current Month
SELECT * FROM artists WHERE MONTH(artists.onlineDate) = MONTH(CURDATE())
-- Current Year
SELECT * FROM artists WHERE YEAR(artists.onlineDate) = YEAR(CURDATE())

但我需要的是准确的:昨天、上周、上个月、去年

我试图解释。如果我们有星期三,而我使用SELECT * FROM artists WHERE DATE(artists.onlineDate) = CURDATE(),那么我会得到星期一到星期三。

我想要上周的星期一到星期日。日历周前。

月份和年份也是如此。

SUB_DATE认为这不是正确的方法。

有什么建议么?

4

3 回答 3

3

好的,我找到了我正在寻找的东西:

MySQL Query 选择上周的数据?

SELECT * FROM testwoche 
 WHERE WEEK (datum, 3) = WEEK(current_date, 3) - 1 
   AND YEAR(datum) = YEAR(current_date) ORDER BY datum DESC

一个月一样

SELECT * FROM testwoche 
 WHERE month (datum) = month(current_date) - 1 
  AND YEAR(datum) = YEAR(current_date) 
ORDER BY datum DESC

这将返回从周一到周日的最后一周以及上个月

感谢大家的帮助!

于 2013-05-14T01:44:07.340 回答
0

要获得特定的周/月/年(当您的数据库包含数年的数据并且当前时间是新一年的开始时仍然有效),这应该有效:

SELECT * FROM testwoche WHERE 
((YEAR(CURDATE())-YEAR(datum)))*52-WEEK(datum,3)+WEEK(CURDATE(),3) = 1;

如果您想要两周前,您可以将其更改为=2(如果您想要本周,从星期一到当天:)=0。如果您想要上个月,您可以将WEEK函数更改为MONTH.

于 2015-01-16T20:10:53.143 回答
0

我认为您可以使用 SUBTIME 功能:https ://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_subtime

我还没有时间真正测试它,但我想你明白了:

昨天:

 SELECT * FROM artists WHERE DATE(artists.onlineDate) = SUBTIME(CURDATE(),'1 0:0:0');

上周

SELECT * FROM artists WHERE WEEK(artists.onlineDate, 3) = WEEK(SUBTIME(CURDATE(),'7 0:0:0'), 3)

上个月

SELECT * FROM artists WHERE MONTH(artists.onlineDate) = MONTH(SUBTIME(CURDATE(),'31 0:0:0'))

去年

SELECT * FROM artists WHERE YEAR(artists.onlineDate) = YEAR(SUBTIME(CURDATE(),'365 0:0:0'))
于 2013-05-13T20:14:02.220 回答