本文介绍如何在各种数据库中使用 SQL 获取月份中的第一天。
Oracle
对于 Oracle 数据库,我们可以使用 TRUNC 函数对日期进行截断。例如:
SELECT TRUNC(date '2023-04-06', 'MM')
FROM DUAL;
| TRUNC(DATE'2023-04-05','MM') |
|------------------------------|
| 2023-04-01 00:00:00 |
TRUNC(datetime, fmt) 函数可以基于 fmt 指定的单位对日期时间进行截断,MM 表示截断到月份。其他的截断单位可以参考官方文档。
MySQL
MySQL 提供了 DATE_SUB 以及 DAYOFMONTH 函数,结合使用就可以获取月份中的第一天。例如:
SET @date:='2023-04-06';
SELECT DATE_SUB(@date, INTERVAL DAYOFMONTH(@date)-1 DAY);
DATE_SUB(@date, INTERVAL day(@date)-1 DAY)|
------------------------------------------+
2023-04-01 |
DATE_SUB 函数表示基于某个日期减去一个时间间隔,DAYOFMONTH 函数用于返回某个日期属于其月份中的第几天。
另外,我们也可以使用 DATE_ADD 函数实现相同的效果。
Microsoft SQL Server
Microsoft SQL Server 的实现方法和 MySQL 类似,只是函数名不同:
DECLARE @date date;
SET @date = '2023-04-06';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);
2023-04-01
DATEADD 函数用于将日期增加一个时间间隔,DAY 函数用于返回某个日期属于其月份中的第几天。
PostgreSQL
PostgreSQL 提供了类似 Oracle 数据库的日期截断函数。例如:
SELECT date_trunc('month', date '2023-04-06')::date;
date_trunc|
----------+
2023-04-01|
date_trunc 函数的返回值包含了时间部分,因此需要转换为日期类型。
SQLite
SQLite 中的 DATE 函数可以很方便地获取月份中的第一天,例如:
SELECT DATE('2023-04-06', 'start of month');
DATE('2023-04-06', 'start of month')|
------------------------------------+
2023-04-01 |
其中,“start of month”表示返回月份中的第一天。