【问题标题】:MySQL results yesterday, last week, last month and last yearMySQL 昨天、上周、上个月和去年的结果
【发布时间】:2013-05-07 22:48:13
【问题描述】:

我的日期字段 (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 不是正确的方法。

有什么建议吗?

【问题讨论】:

  • 这取决于您要查找的内容。如果您希望所有记录的 onlineDate 都属于上周(例如),那么您的逻辑是完全正确的。你现在没有工作怎么办?
  • 您的问题不是很清楚,您需要一周、一个月和一年前的确切时刻还是日期范围?
  • 我需要,例如,上周。有了这个我得到了当前周 SELECT * FROM Artists WHERE WEEK(artists.onlineDate, 3) = WEEK(CURDATE(), 3) 但我需要前一周,从周一到周日,而不是 7 天前。
  • 我现在开始工作了,它似乎只是添加了一个 "-1" WEEK(artists.onlineDate, 3) = WEEK(CURDATE(), 3) -1 所以我在一周前得到了日历

标签: mysql recordset


【解决方案1】:

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

MySQL Query to select data from last week?

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

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

感谢大家的帮助!

【讨论】:

  • 确保您将此答案勾选为已接受,以帮助未来的访问者。
  • 就我的一点mySQL知识查了一下,结果正是我需要的。
  • 这个查询“上个月”的一个问题是它在运行 1 月以获取 12 月的数据时不起作用,这不是当年的数据,对吧?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 2010-12-25
      • 1970-01-01
      • 2012-10-22
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多