上一篇文章中我们介绍了如何利用 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’ 减去一天返回了原日期所在月份的最后一天。