SQL 获取月份中的第一天

本文介绍如何在各种数据库中使用 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”表示返回月份中的第一天。

猜你喜欢

转载自blog.csdn.net/horses/article/details/129958517