MySQL昨天、上周、上月和去年的结果

MySQL昨天、上周、上月和去年的结果,mysql,recordset,Mysql,Recordset,my datefield Artisters.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 SELEC

my datefield Artisters.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,其中DATEartists.onlineDate=CURDATE,那么我有星期一到星期三

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

月份和年份也一样

我认为约会不是正确的方式


有什么建议吗?

我想你可以使用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'))

好的,我找到了我要找的东西:

每月都一样

SELECT * FROM testwoche 
 WHERE month (datum) = month(current_date) - 1 
  AND YEAR(datum) = YEAR(current_date) 
ORDER BY datum DESC
这将返回从周一到周日的最后一周以及最后一个月


谢谢大家的帮助

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

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

如果您想在两周前使用,可以将其更改为=2,如果您想在本周使用,从周一到当天:=0。如果您想要上个月,可以将WEEK函数更改为month。

这取决于您要查找的内容。例如,如果您希望所有记录的联机日期都在上周,那么您的逻辑是完全正确的。你现在的东西怎么不起作用了?你的问题不太清楚你需要一周、一个月、一年前的确切时间还是日期范围?比如,我需要上周。有了这个,我从艺术家那里得到了当前一周的选择*,其中WEEKartists.onlineDate,3=WEEKCURDATE,3,但我需要前一周,从周一到周日,而不是7天前。我现在已经开始工作了,它似乎只是添加了一个-1 WEEKartists.onlineDate,3=WEEKCURDATE,3-1所以我在前一周得到日历,确保你检查这个答案是否被接受,以帮助未来的访问者。就我用我的mySQL知识检查它而言,结果正是我所需要的。上个月这个查询的一个问题是,它在运行1月份时无法获得12月份的数据,而12月份的数据不在今年,正当
SELECT * FROM testwoche WHERE 
((YEAR(CURDATE())-YEAR(datum)))*52-WEEK(datum,3)+WEEK(CURDATE(),3) = 1;