MySQL 如何在MySQL中获取上个月的第一天?
在实际业务中,我们常常需要查询上个月的数据。而常见的一个需求是查询上个月的第一天,以此作为数据筛选的条件。
下面来介绍在MySQL中如何获取上个月的第一天。
阅读更多:MySQL 教程
方法一
最直接的方法是使用MySQL内置函数DATE_FORMAT
和DATE_SUB
来计算上个月的第一天,具体的查询语句如下:
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01')
上面的查询语句中,DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
表示取当前日期往前推一个月的时间,而'%Y-%m-01'
则表示将计算结果以年-月-01的格式输出,也就是上个月的第一天。
具体的演示效果如下所示:
mysql> SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01');
+---------------------------------------------------------+
| DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01') |
+---------------------------------------------------------+
| 2022-01-01 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
方法二
除了上面的方法,我们还可以使用LAST_DAY
函数来获取上个月的最后一天,然后再使用DATE_SUB
函数来计算出上个月的第一天,具体的查询语句如下:
SELECT DATE_SUB(DATE_FORMAT(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH)), '%Y-%m-%d'), INTERVAL DAY(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH))) - 1 DAY)
上面的查询语句中,DATE_SUB(CURDATE(), INTERVAL 2 MONTH)
表示取当前日期往前推两个月的时间,然后使用LAST_DAY
函数获取该月的最后一天,最后把获取到的日期再次使用DATE_SUB
函数减去该月的天数再加上1,就可以得到上个月的第一天了。这个方法可能有些复杂,不过也非常的实用。
具体的演示效果如下所示:
mysql> SELECT DATE_SUB(DATE_FORMAT(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH)), '%Y-%m-%d'), INTERVAL DAY(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH))) - 1 DAY);
+-------------------------------------------------------------------+
| DATE_SUB(DATE_FORMAT(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH)), '%Y-%m-%d'), INTERVAL DAY(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH))) - 1 DAY) |
+-------------------------------------------------------------------+
| 2022-01-01 |
+-------------------------------------------------------------------+
1 row in set (0.01 sec)
结论
至此,我们已经介绍了在MySQL中如何获取上个月的第一天的两种方法。其中,第一种方法比较简单而且实用,推荐大家使用。不管是哪种方法,只要理解了原理,就可以轻松地应对类似的查询需求了。