【问题标题】:How to query for the first date of a week on the PREVIOUS year如何查询上一年一周的第一个日期
【发布时间】:2019-01-08 06:48:51
【问题描述】:

绞尽脑汁想弄清楚这一点,但我似乎找不到任何有用的现有线程。

简单地说,我想找到一周的第一天(作为日期),但一年前,对于任何给定的日期。我们的日历周从星期日开始。

Here's a snap of the table I have at my disposal

非常感谢任何帮助!

谢谢!

【问题讨论】:

  • 所以你looked at the manual 什么也没找到?继续戳,这里有很多好东西。
  • 我做到了,虽然我对 SQL 比较陌生,而且日期操作从来不是我的强项。下面的解释很有帮助。无论如何,谢谢,悲伤的人。
  • 通常最好尝试一些东西,anything,以表明您已经尝试过而不是放弃并刚刚发布在 Stack Overflow 上。我们通常可以采用您的非功能性解决方案,持续很短的距离,而无需从头开始重新完成您的所有工作。

标签: mysql sql datetime


【解决方案1】:

看到这个。 How do I get the first day of the week of a date in mysql?

您可以通过这种方式获得所需的结果:

mydate - INTERVAL 1 YEAR + INTERVAL 1-DAYOFWEEK(mydate - INTERVAL 1 YEAR) DAY

解释:

mydate - INTERVAL 1 YEAR

为您提供mydate 前一年的日期。

anyday + INTERVAL 1-DAYOFWEEK(anyday) DAY 

为您提供anyday 周开始的星期日。

类似地,您可以像这样获得anyday 的第一天:

LAST_DAY(anyday) + INTERVAL 1 DAY - INTERVAL 1 MONTH

有些人称这周-和月-截断

【讨论】:

    【解决方案2】:

    您可以使用datesub() 从今天减去一年 (curdate())。使用weekday() 获取工作日。它返回一个从06 的数字,其中0 是星期一。减去那么多天加一,因为您的第一个工作日是星期日而不是星期一。

    date_sub(date_sub(curdate(),
                      INTERVAL 1 YEAR),
             INTERVAL weekday(date_sub(curdate(),
                                       INTERVAL 1 YEAR)) + 1 DAY)
    

    【讨论】:

      【解决方案3】:

      这是一个函数:

      CREATE FUNCTION `SUNDAY`(indate date) RETURNS date
          NO SQL
      BEGIN
      declare prevyear date;
      set prevyear = indate - interval 1 year;
      return prevyear - weekday(prevyear) - interval 1 day;
      END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多