【问题标题】:MySQL - First & Last Day of Previous WeekMySQL - 前一周的第一天和最后一天
【发布时间】:2017-07-21 06:38:32
【问题描述】:

我试图在 MySQL 中获取前一周的第一天和最后一天,其中第一天和最后一天分别是星期一和星期日。

例如,如果今天(2017 年 3 月 1 日)是执行 SQL 的时间,我想获取:

  • 第一天 --> 2 月 20 日
  • LastDay --> 2 月 26 日

我已经尝试了以下和各种变体,但没有成功。

SELECT DATE_ADD(curdate(), INTERVAL(-WEEKDAY(curdate())) DAY); 

如果在本周内的任何时间执行,是否有可能实现这些结果?

【问题讨论】:

  • 您将获得本周的第一天,因此您可以获得前一周的第一天和最后一天。为什么你的尝试没有成功!?
  • MySQL 是用于存储和检索数据的,而不是其他的。
  • 也就是说……SELECT CURDATE()-INTERVAL WEEKDAY(CURDATE())+1 DAY x;
  • 我在 7 天前得到了答案,但现在答案已更新并得到前一周的第一天。希望对您有所帮助。

标签: mysql sql


【解决方案1】:

选择前一周的第一天和最后一天:

SELECT
 (curdate() - INTERVAL((WEEKDAY(curdate()))+1) DAY) as e,
 (curdate() - INTERVAL((WEEKDAY(curdate()))+7) DAY) as s

s: 2017-02-20

e: 2017-02-26

如果你想过滤上周表格行:

SELECT * FROM tblName
WHERE dateCol >= (curdate() - INTERVAL((WEEKDAY(curdate()))+7) DAY)
  AND dateCol < (curdate() - INTERVAL((WEEKDAY(curdate()))+1) DAY)
ORDER BY dateCol DESC -- or ASC

【讨论】:

    【解决方案2】:

    给你:

    SELECT FirstDay, DATE_ADD(FirstDay, INTERVAL 6 DAY) as LastDay
    FROM(
    SELECT DATE_ADD(DATE_SUB(NOW(), INTERVAL WEEKDAY(NOW()) DAY), INTERVAL -1 WEEK) as FirstDay) a
    

    这里是 SQL Fiddle

    【讨论】:

      【解决方案3】:

      前一周的第一天

      SELECT SUBDATE(SUBDATE(CURDATE(),7), WEEKDAY(CURDATE()));
      

      上周的最后一天

      SELECT ADDDATE(SUBDATE(CURDATE(),7), 6 - WEEKDAY(CURDATE()));
      

      【讨论】:

        猜你喜欢
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 2021-07-21
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-26
        相关资源
        最近更新 更多