MySQL 8.0参考资料指出MOD()+ 1返回的结果与1 + MOD()的结果不同

问题描述 投票:0回答:1

我正在尝试阅读MySQL官方8.0参考/教程来学习MySQL。https://dev.mysql.com/doc/refman/8.0/en/date-calculations.html

在解释如何使用计算获得一月份的段落中,它说

完成同一任务的另一种方法是加1以获得使用模函数(MOD)后的下一个月如果当前值为12,则将月份值包装为0:

mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;

MONTH()返回1到12之间的数字。MOD(something,12)返回0到11之间的数字。因此,加法必须在MOD(),否则我们将从11月(11)到1月(1)。

我的问题是为什么加法应该在MOD()之后?即使加法在“ MOD(MONTH(CURDATE()),12)”之前,我也会得到相同的结果,如下所示。

mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 1 + MOD(MONTH(CURDATE()), 12);

我在这里想念东西吗?

mysql documentation
1个回答
0
投票

以下两个表达式是相同的,因为加法在定义上是可交换的:

MOD(MONTH(CURDATE()), 12) + 1
1 + MOD(MONTH(CURDATE()), 12)

为什么这两种方法都起作用的逻辑是,当当前日期的月份(介于1到12之间的数字,等于或小于11时,乘以12的模数会简单地返回该数字,然后我们将其加一个月) 。对于12月份的月份(12),表达式12%12返回0,然后我们加一以获得一月(1)。

© www.soinside.com 2019 - 2024. All rights reserved.