MYSQL中取当前年份的第一天和当前周,月,季度,年度的第一天/最后一天

这篇文章展示了如何使用MySQL的日期和时间函数来获取当前月份、季度和年的第一天和最后一天,以及上个月和上个季度的这些日期。示例包括LAST_DAY(),MAKEDATE(),EXTRACT(),INTERVAL,和QUARTER()等函数的用法。

– 当月最后一天
SELECT LAST_DAY(now());
– 当月第一天
SELECT concat(date_format(LAST_DAY(now()),‘%Y-%m-’),‘01’);

– 当前季度的第一天:
select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-3 month),‘%Y-%m-’),‘01’);
– 当前季度的最后一天:
select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-1 month);

– 今年第一天
SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY);
– 今年最后一天
SELECT concat(YEAR(now()),‘-12-31’);

– 上月的第一天:
SELECT concat(date_format(LAST_DAY(now() - interval 1 month),‘%Y-%m-’),‘01’);
– 上月的最后一天:
SELECT LAST_DAY(now() - interval 1 month);

– 上季度的第一天
select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-6 month),‘%Y-%m-’),‘01’);
– 上季度的最后一天
select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-4 month);

– 去年第一天
SELECT DATE_SUB(CURDATE() - interval 1 YEAR,INTERVAL dayofyear(now())-1 DAY);
– 去年最后一天
SELECT concat(YEAR(now()- interval 1 YEAR),‘-12-31’);

MySQL 中,要获取上一季度第一天,可以通过以下步骤实现: ### 方法解析: 1. **确定当前季度**:使用 `QUARTER(current_date)` 获取当前季度(1~4)。 2. **计算上一季度**:当前季度减 1,若为 0 则表示上一季度是第 4 季度(跨年情况)。 3. **调整年份**:如果上一季度是第 4 季度,则年份需减 1。 4. **计算上一季度的第一个**:上一季度的第一个为 `(上一季度编号 - 1) * 3 + 1`。 5. **构造日期**:使用 `MAKEDATE` 日期函数生成上一季度第一天。 ### 查询实现: ```sql SELECT DATE_FORMAT( MAKEDATE( YEAR(current_date) - IF(QUARTER(current_date) = 1, 1, 0), 1 ) + INTERVAL ((QUARTER(current_date) - 2) * 3) MONTH, '%Y-%m-%d' ) AS first_day_of_last_quarter; ``` ### 简化逻辑: 更直观的方法是直接计算上一季度的起始份: ```sql SELECT DATE_FORMAT( DATE_SUB( DATE_SUB(current_date, INTERVAL 1 QUARTER), INTERVAL (DAYOFQUARTER(current_date) - 1) DAY ), '%Y-%m-%d' ) AS first_day_of_last_quarter; ``` 但 MySQL 没有内置的 `DAYOFQUARTER` 函数,因此需改用以下方式: ### 推荐查询: ```sql SELECT DATE_FORMAT( DATE_ADD( MAKEDATE(YEAR(current_date), 1), INTERVAL (QUARTER(current_date) - 2) * 3 MONTH ), '%Y-%m-%d' ) AS first_day_of_last_quarter; ``` **说明**: - `QUARTER(current_date) - 2`:计算上一季度的偏移量(例如当前第 2 季度,`2-2=0`,即第 1 季度的起始)。 - `MAKEDATE(YEAR(current_date), 1)`:获取当前年份第一天(1 1 日)。 - `INTERVAL ... MONTH`:调整到上一季度的第一个(如第 1 季度为 1 ,第 4 季度为 10 )。 ### 示例结果: - 当前日期为 `2023-05-15`(第 2 季度)时,上一季度是第 1 季度,结果为 `2023-01-01`。 - 当前日期为 `2023-01-10`(第 1 季度)时,上一季度是第 4 季度(跨年),结果为 `2022-10-01`。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值