MySQL - DATE_ADD 月间隔

Posted

技术标签:

【中文标题】MySQL - DATE_ADD 月间隔【英文标题】:MySQL - DATE_ADD month interval 【发布时间】: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 工作得很好,并在一个月内使用正确的天数?

【问题讨论】:

【参考方案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。

以上是关于MySQL - DATE_ADD 月间隔的主要内容,如果未能解决你的问题,请参考以下文章

向日期添加指定的时间间隔(mysql)

MySQL DATE_ADD函数

MySQL更新时间

mysql时间相加函数DATE_ADD()

Mysql中使用函数处理时间

Mysql 更新时间(加上或者减去一段时间)