📌  相关文章
📜  获取数据库中一周的第一天和最后一天的 SQL 查询(1)

📅  最后修改于: 2023-12-03 15:27:50.415000             🧑  作者: Mango

获取数据库中一周的第一天和最后一天的 SQL 查询

很多时候,我们需要在数据库中查询一周的数据,这时候就需要知道一周的第一天和最后一天,本篇文章就是介绍如何获取数据库中一周的第一天和最后一天的 SQL 查询。

MySQL
获取一周的第一天

使用 MySQL 内置函数 DATE_FORMAT(),将当前时间减去 WEEKDAY() 的值再减去 6 即可。

SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), '%Y-%m-%d') AS `week_start`;

结果示例:

+------------+
| week_start |
+------------+
| 2021-08-15 |
+------------+
获取一周的最后一天

和获取一周的第一天类似,只需将 6 改为 0

SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 6 - WEEKDAY(CURDATE()) DAY), '%Y-%m-%d') AS `week_end`;

结果示例:

+------------+
|  week_end   |
+------------+
| 2021-08-21 |
+------------+
PostgreSQL
获取一周的第一天

使用 PostgreSQL 内置函数 TO_CHAR(),将当前时间减去 EXTRACT(DOW FROM ) 的值即可。

SELECT TO_CHAR(CURRENT_DATE - EXTRACT(DOW FROM CURRENT_DATE) + 1, 'YYYY-MM-DD') AS week_start;

结果示例:

+------------+
| week_start |
+------------+
| 2021-08-15 |
+------------+
获取一周的最后一天

和获取一周的第一天类似,只需将 1 改为 7

SELECT TO_CHAR(CURRENT_DATE + (7 - EXTRACT(DOW FROM CURRENT_DATE)), 'YYYY-MM-DD') AS week_end;

结果示例:

+------------+
|  week_end   |
+------------+
| 2021-08-21 |
+------------+
Microsoft SQL Server
获取一周的第一天

使用 Microsoft SQL Server 内置函数 DATEADD()DATEDIFF(),将当前时间减去 DATEDIFF() 的值再减去 6 即可。

SELECT CONVERT(VARCHAR, DATEADD(week, DATEDIFF(week, 0, GETDATE()), 0), 23) AS week_start;

结果示例:

+------------+
| week_start |
+------------+
| 2021-08-15 |
+------------+
获取一周的最后一天

和获取一周的第一天类似,只需将 6 改为 5

SELECT CONVERT(VARCHAR, DATEADD(day, 5 - DATEDIFF(day, 0, GETDATE()) % 7, GETDATE()), 23) as week_end;

结果示例:

+------------+
|  week_end   |
+------------+
| 2021-08-21 |
+------------+
示例说明

在上述示例中,我们使用了不同的数据库方言,但实现的逻辑相同,即通过内置函数获取当前时间的某些信息,再根据这些信息计算出一周的第一天和最后一天。

例如在 MySQL 中,我们使用 WEEKDAY() 函数获取当前日期是星期几,然后再用 DATE_SUB() 函数减去该值得到本周的第一天;类似地,用 DATE_ADD() 函数加上一周的天数再减去 WEEKDAY() 得到本周的最后一天。

在 PostgreSQL 和 Microsoft SQL Server 中,我们均使用了 EXTRACT() 函数获取当前日期是星期几,然后再用减法或加法将其转化为一周的第一天或最后一天。

此外,不同数据库也有不同的函数来格式化日期,例如在 MySQL 中,我们使用 DATE_FORMAT() 函数格式化日期,而在 Microsoft SQL Server 中,则使用 CONVERT() 函数。