添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

SQL获取本月、上月、下月的第一、最后一天日期

以MySQL为例,其他数据库大同小异。

获取当前日期

select curdate();
curdate() |
----------+
2023-07-07|

MySQL的内置函数,多数数据库都有。

获取本月最后一天

select last_day(curdate());
last_day(curdate())|
-------------------+
         2023-07-31|

MySQL的内置函数last_day(),可直接获取日期所在月份的最后一天日期。

获取月份日期的日期值

select day(curdate());
day(curdate())|
--------------+

MySQL内置函数day(),传入日期可获取该日期所在月份的日期值。

同理还可以获取月份值:month()

日期添加指定的时间间隔

DATE_ADD(date,INTERVAL expr type)
select date_add(curdate(), interval 1 day);
date_add(curdate(), interval 1 day)|
-----------------------------------+
                         2023-07-08|

MySQL内置函数,可以给一个日期添加(或减少)指定天数。

上月最后一天

select date_add(last_day(curdate()), interval -1 month);
date_add(last_day(curdate()), interval -1 month)|
------------------------------------------------+
                                      2023-06-30|

last_day(curdate()),获取当前月份的最后一天,是2023-07-31

interval -1 month,偏移量是向前1个月;

所以date_add(last_day(curdate()), interval -1 month)表示本月最后一天向前偏移一个月。

同理可以求前X个月的最后一天,只需要改变interval -1 month为需要的月份偏移量即可。

下月最后一天

select date_add(last_day(curdate()), interval 1 month);
date_add(last_day(curdate()), interval 1 month)|
-----------------------------------------------+
                                     2023-08-31|

与获取上月最后一天原理相同,只需要将偏移量改为正数。

同理也可以获取后X个月的最后一天,修改interval 1 month为需要的月份偏移量即可。

本月第一天

select date_add(curdate(), interval - day(curdate()) + 1 day);
date_add(curdate(), interval - day(curdate()) + 1 day)|
------------------------------------------------------+
                                            2023-07-01|

day(curdate()),当前日期是7日,所以结果是7

interval - day(curdate()) + 1 day表示时间间隔是- day(curdate()) + 1 day,即时间间隔是本月过去的天数减一天,也就是-7+1=-6天;

所以date_add(curdate(), interval - day(curdate()) + 1 day)的意思就是当前日期 + (-本月过去的天数 + 1)

上月第一天

select date_add(curdate()-day(curdate())+1, interval -1 month);
date_add(curdate()-day(curdate())+1, interval -1 month)|
-------------------------------------------------------+
2023-06-01                                             |

首先看curdate()-day(curdate())+1当前日期-当前月份天数+1,其实就是取当前月的第一天,以今天为例,20230707-7+1=20230701

然后偏移量为interval -1 month表示向前推1个月;

最终结果就是当前月的第一天 - 1个月得到上个月的第一天。

同理可以取前x个月的第一天,只需要改变interval -1 month为需要的月份偏移量即可。

下月第一天

select date_add(curdate()-day(curdate())+1, interval 1 month);
date_add(curdate()-day(curdate())+1, interval 1 month)|
------------------------------------------------------+
2023-08-01                                            |

与“上月第一天”原理相同,最后偏移量为正数月份即可。同理可获取后x个月的第一天。