【问题标题】:MySQL round date to the start of the week and monthMySQL 舍入日期到星期和月份的开始
【发布时间】:2012-07-12 18:27:30
【问题描述】:

对于“2012-07-12”,我怎样才能得到一周的开始,即“2012-07-08”,以及月初,即“2012-07-01”?

【问题讨论】:

  • 你是如何插入数据的?从存储过程?从一个程序?当您从数据库返回数据时,您是要插入数据“四舍五入”还是“四舍五入”?
  • 数据已经有完整的日期。对于某些查询,我想将日期四舍五入。
  • 重复(星期几):stackoverflow.com/questions/6944055/…
  • 重复(月份中的某天):stackoverflow.com/questions/3298288/…

标签: mysql date


【解决方案1】:

每月的第一天:

SELECT DATE_FORMAT('2007-07-12', '%Y-%m-01');

输出:2007-07-01

一周的第一天:

SELECT DATE_SUB('2007-07-12', INTERVAL DAYOFWEEK('2007-07-12')-1 DAY);

输出:2007-07-08

MySQL 参考:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

【讨论】:

  • DATE_FORMAT 绝对是一种干净且简单的舍入方式。谢谢。
【解决方案2】:

Borophyll's 的答案相同,但我已更改当月第一天的行为以返回日期,而不仅仅是避免user151220's 答案中提到的日期格式/解析的字符串。

每月的第一天:

SELECT DATE_SUB('2007-07-12', INTERVAL DAYOFMONTH('2007-07-12') - 1 DAY);

输出:2007-07-01

一周的第一天:

SELECT DATE_SUB('2007-07-12', INTERVAL DAYOFWEEK('2007-07-12') - 1 DAY);

输出:2007-07-08

MySQL 参考:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

【讨论】:

    【解决方案3】:

    对于那些需要将星期一作为一周第一天的人:

    SELECT DATE_SUB('2007-07-12', INTERVAL WEEKDAY('2007-07-12') DAY);
    

    输出:2007-07-09

    这依赖于WEEKDAY 函数,它从星期一开始,而不是DAYOFWEEK,它从星期日开始。

    【讨论】:

      【解决方案4】:

      Borophyll 的 DATE_FORMAT 回复非常好,但给出的是字符串而不是日期。所以不能轻易比较。

      如果您需要将其用作与日期字段的比较,请使用 str_to_date 将其反转回日期而不是字符串。

      select x from y where date >= str_to_date( DATE_FORMAT(now()-interval 12 month,'Y-%m-01'), '%Y-%m-%d')
      

      如果您(比如说)查看 12 个月的销售数据,但您希望始终从每月 1 日开始。

      【讨论】:

        【解决方案5】:

        如果您只想对其进行编码而忘记它,这将起作用,它现在将使用日期时间并始终返回 MTD 结果-

        where date_completed between date_sub(date(now()), INTERVAL dayofmonth(now()) -1 day) and now()
        

        【讨论】:

          猜你喜欢
          • 2020-07-02
          • 1970-01-01
          • 2012-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-11
          • 2021-12-16
          • 1970-01-01
          相关资源
          最近更新 更多