上一篇文章中我们介绍了如何利用 SQL 获取月份中的第一天,本文就来聊一聊怎么获取月份中的最后一天,涉及的数据库包括 Oracle、MySQL、Microsoft SQL Server、PostgreSQL 以及 SQLite。

Oracle

Oracle 数据库提供了 LAST_DAY() 函数,可以获取指定日期所在月份的最后一天:

SELECT SYSDATE, LAST_DAY(SYSDATE) "Last", LAST_DAY(SYSDATE) - SYSDATE "Days Left"FROM DUAL;SYSDATE Last Days Left--------- --------- ----------20-MAY-23 31-MAY-23 11

一个月份中的最后一天由会话参数 NLS_CALENDAR 决定。

MySQL

MySQL 提供了 LAST_DAY() 函数,可以返回指定月份的最后一天:

SELECT LAST_DAY(current_date());LAST_DAY(current_date())|------------------------+2023-05-31|

MariaDB 也提供了相同的 LAST_DAY() 函数。

Microsoft SQL Server

Microsoft SQL Server 提供了 EOMONTH() 函数,返回包含指定日期所在月份的最后一天:

SELECT EOMONTH( '2023-01-01' );2023-01-31

EOMONTH() 函数包含一个可选的参数,可以增加或减少一个指定的月份数量:

SELECT EOMONTH( '2023-01-01', 4 );2023-05-31

PostgreSQL

PostgreSQL 没有提供可以直接使用的函数获取月份中的最后一天,需要通过额外的操作达到相同的效果:

SELECT (date_trunc('month', date '2023-05-20') + interval '1 month - 1 day')::date;date|----------+2023-05-31|

其中,DATE_TRUNC() 函数用于截断日期。示例中的作用是将日期截断到月份的第一天。然后,我们通过增加一个时间间隔获取月份的最后一天。

SQLite

SQLite 提供了 DATE() 函数,可以用于获取月份中的最后一天:

SELECT DATE('2023-05-20', 'start of month', '+1 month', '-1 day');2023-05-31

示例中函数的处理过程和 PostgreSQL 类似,‘start of month’ 参数表示获取月份的第一天,然后 ‘+1 month’ 获取了下一个月份,最后 ‘-1 day’ 减去一天返回了原日期所在月份的最后一天。