如何使用SQL查询获取上一自然月的日期范围(包括本月的第一天和前一天)?
时间: 2024-11-15 22:25:47 浏览: 2
计算本月和上个月的第一天和最后一天(SQL Server)
在SQL中,获取上一自然月的日期范围通常涉及到计算日期减去一个月以及处理每月第一天的情况。这里是一个基本的示例,假设你是从当前日期开始算起:
```sql
-- 获取当前日期
SET @current_date = CURDATE();
-- 减去1个月,得到上个月的最后一天
SET @last_month_end = DATE_SUB(@current_date, INTERVAL 1 MONTH);
-- 如果上个月不是30天,需要调整到上个月的最后一个工作日(考虑到可能出现的非完整月份)
IF DAYOFMONTH(@last_month_end) != 31 THEN
SET @last_month_end = DATE_ADD(@last_month_end, INTERVAL - WEEKDAY(@last_month_end) DAY);
END IF;
-- 上个月的第一天
SET @first_day_of_month = DATE_SUB(@last_month_end, INTERVAL 1 DAY);
-- 结果就是上一自然月的日期范围:[@first_day_of_month, @last_month_end]
SELECT DATE_FORMAT(@first_day_of_month, '%Y-%m-%d') AS 'Start Date',
DATE_FORMAT(@last_month_end, '%Y-%m-%d') AS 'End Date';
```
请注意,这个查询依赖于MySQL,其他数据库系统可能有不同的函数来获取当前日期、日期操作等。同时,上述处理每月第一天的方法可能并不适用于所有情况,特别是在闰年和非标准月份(如二月有29天或28天)的情况下。
阅读全文