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 月间隔的主要内容,如果未能解决你的问题,请参考以下文章