mysql中加减月份时的怪异时间计算

mysql中加减月份时的怪异时间计算,mysql,sql,date,Mysql,Sql,Date,我试图对查询执行一些时间计算(timestampadd、timestampdiff),但遇到了一个意外的行为 我在mysql中执行了以下查询: select timestampdiff(MONTH, timestampadd(MONTH, 1, '2017-01-30'),'2017-01-30') 使用logic将2017-01-30增加一个月,然后请求该日期与2017-01-30之间的月差 我希望结果是平凡的,等于1,但上一个查询的计算结果为0 这搞砸了我的计算 为什么呢 这是直截了当的,

我试图对查询执行一些时间计算(timestampadd、timestampdiff),但遇到了一个意外的行为

我在mysql中执行了以下查询:

select timestampdiff(MONTH, timestampadd(MONTH, 1, '2017-01-30'),'2017-01-30')
使用logic将2017-01-30增加一个月,然后请求该日期与2017-01-30之间的月差

我希望结果是平凡的,等于1,但上一个查询的计算结果为0

这搞砸了我的计算

为什么呢

这是直截了当的, 您将在1月30日增加1个月,即2017年2月28日

现在,1月30日和2月28日之间的差值只有29天,这还不到一个月的值。(30天)

因此它是0

为了准确起见,您需要小心处理二月。

这是直截了当的, 您将在1月30日增加1个月,即2017年2月28日

现在,1月30日和2月28日之间的差值只有29天,这还不到一个月的值。(30天)

因此它是0


为了准确起见,您需要小心处理2月份。

那么mysql的月份值是多少呢?30天还是31天?它是30天。因此,加上月份,月份长度是可变的,可以小于30天(1月30日到2月28日是28天),但减去是30天?这对我来说真的很奇怪。我会将答案标记为已接受,但我想真正理解为什么行为在这里不是对称的。是的,事实上它是奇怪的!!是的,我知道,但是为什么函数
timestampdiff()
calculation不能这样做呢?这是个问题吗?需要致电MySQL团队:-(:-)那么mysql的月值是多少呢?30天还是31天?它是30天。因此,加上月份,月份长度是可变的,可以小于30天(1月30日到2月28日是28天),但减去是30天?这对我来说真的很奇怪。我会将答案标记为已接受,但我想真正理解为什么行为在这里不是对称的。是的,事实上它是奇怪的!!是的,我知道,但是为什么函数
timestampdiff()
calculation不能这样做呢?这是个问题吗?需要致电MySQL团队:-(:-)这:
选择月份(timestampadd(MONTH,1,'2017-01-30'))-月份('2017-01-30')
是否可以解决此问题?这只查看月份数(例如:feb=2)并减去两者。现在,如果您计算1月31日和2月1日,这可能是一个问题,因为只有一天,但这将返回
1
month。这:
select month(timestampadd(month,1,'2017-01-30'))-month('2017-01-30')
是否可以解决此问题?这只查看月份数(例如:feb=2)并减去两者。现在,如果您计算1月31日和2月1日,这可能是一个问题,因为这只是一天,但这将返回
1
month。