【问题标题】:MySQL - DATE_ADD month intervalMySQL - DATE_ADD 月间隔
【发布时间】:2011-10-14 07:23:08
【问题描述】:

我在 MySQL 中遇到了函数 DATE_ADD 的问题。

我的请求如下所示:

SELECT * 
FROM mydb 
WHERE creationdate BETWEEN "2011-01-01" AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH) 
GROUP BY MONTH(creationdate)

问题是,在结果中,-我认为-因为 June 只有 30 天,所以该功能无法正常工作,因为我有 7 月第一天的结果.

有没有办法告诉DATE_ADD 工作得很好,并在一个月内使用正确的天数?

【问题讨论】:

    标签: mysql sql select dateadd


    【解决方案1】:

    DATE_ADD 适用于不同月份。问题是您要向2001-01-01 添加六个月,而 7 月 1 日应该在那里。

    这就是你想要做的:

    SELECT * 
    FROM mydb 
    WHERE creationdate BETWEEN "2011-01-01" 
                       AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH) - INTERVAL 1 DAY
    GROUP BY MONTH(creationdate)
    

    SELECT * 
    FROM mydb 
    WHERE creationdate >= "2011-01-01" 
    AND creationdate < DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
    GROUP BY MONTH(creationdate)
    

    如需进一步学习,请查看DATE_ADD documentation

    *修改为正确的语法

    【讨论】:

    • 这正是我想要的 :) 谢谢,不知道我们可以在 DATE_ADD 中使用多个间隔。
    • 顺便说一句,“间隔 6 个月”应该是“间隔 6 个月”。请注意末尾缺少“S”。
    • 那是因为这是 SQL,而不是您的语言。这意味着:间隔金额类型
    【解决方案2】:

    嗯,对我来说这是预期的结果;增加六个月到 1 月 1 日。

    mysql> SELECT DATE_ADD( '2011-01-01', INTERVAL 6 month );
    +--------------------------------------------+
    | DATE_ADD( '2011-01-01', INTERVAL 6 month ) |
    +--------------------------------------------+
    | 2011-07-01                                 | 
    +--------------------------------------------+
    

    【讨论】:

    • 事实上,我想要的结果是“2011-06-30”,但真的不知道如何得到它......
    • DATE_SUB(DATE_ADD('2011-01-01', INTERVAL 6 个月), INTERVAL 1 天)
    • 或者您必须明确使用 > 和
    • DATE_SUB 工作正常,谢谢。事实上,我专注于 6 个月的间隔,并没有真正考虑在一天后删除 x(
    【解决方案3】:

    BETWEEN ... AND

    如果expr大于等于min且expr小于等于max,BETWEEN返回1,否则返回0。

    这里的重要部分是等于最大值,即 7 月 1 日。

    【讨论】:

    • 我知道 BETWEEN 是什么,但在我的上下文中,我无法使用它。
    【解决方案4】:

    您认为DATE_ADD("2011-01-01", INTERVAL 6 MONTH) 应该给您“2011-06-30”而不是“2011-07-01”,我是否理解正确?当然,2011-01-01 + 6 个月是 2011-07-01。你想要DATE_SUB(DATE_ADD("2011-01-01", INTERVAL 6 MONTH), INTERVAL 1 DAY)之类的东西。

    【讨论】:

      【解决方案5】:

      DATE_ADD 工作正常。 1 月 1 日加 6 个月是 7 月 1 日,就像 1 月 1 日加 1 个月是 2 月 1 日一样。

      操作之间是包容性的。因此,您将在 7 月 1 日之前完成所有工作。 (另见MySQL "between" clause not inclusive?

      您需要做的是减去 1 天或使用

      【讨论】:

      • 由于“6”是一个动态数字,我不能在我的请求中使用 BETWEEN。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      相关资源
      最近更新 更多