我正在尝试使用MySQL获取非标准季度的开始/结束日期。This question/answer很好地获得标准季度的开始/结束日期(一月至三月,四月至六月等)。
如果该季度不是从一个典型的会计年度季度开始(一月至三月、四月至六月等),对如何修改查询有任何建议吗?我有一个案子,我需要这个季度从二月开始(二月到四月,五月到七月等)。以及三月开始(三月至五月,六月至八月等)。
我尝试过调整间隔,以适应1或2个月内的转换,但是由于MySQL使用标准的季度返回一个集合1, 2,3,4的季度,所以它不能正常工作。
下面是来自先前链接的问题的查询,该问题返回标准日历年度季度的开始/结束(传递一个日期,我感兴趣的是获取该季度的开始/结束日期):
SELECT MAKEDATE(YEAR('2022-11-02'), 1) + INTERVAL QUARTER('2022-11-02') QUARTER - INTERVAL 1 QUARTER AS quarter_start;
+---------------+
| quarter_start |
+---------------+
| 2022-10-01 |
+---------------+
SELECT MAKEDATE(YEAR('2022-11-02'), 1) + INTERVAL QUARTER('2022-11-02') QUARTER - INTERVAL 1 DAY AS quarter_end;
+---------------+
| quarter_end |
+---------------+
| 2022-12-31 |
+---------------+如果季度应提前1个月(季度:2月至4月、5月至7月、8月至10月、11月至1月),我如何调整这一点以返回2022-11-01的quarter_start和2023-01-31的quarter_end?
发布于 2022-10-10 00:45:35
这是简单的约会数学。
select
date,
date - interval day(date)-1 day - interval (month(date) + offset) mod 3 month as quarter_start,
date - interval day(date)-1 day - interval (month(date) + offset) mod 3 - 3 month - interval 1 day as quarter_end其中日历季度为2,从2月/5月/8月/11月开始的季度为1,从3月/6月/9月/12月开始的季度为0。
发布于 2022-10-09 23:15:19
从这个月开始,你得自己计算。
SELECT CASE
WHEN MONTH(date) = 1 THEN FORMAT_DATE(DATE_SUB(date, INTERVAL 1 YEAR), '%Y-11-01'))
WHEN MONTH(date) IN (2, 3, 4) THEN FORMAT_DATE(date, '%Y-02-01'))
WHEN MONTH(date) IN (5, 6, 7) THEN FORMAT_DATE(date, '%Y-05-01'))
WHEN MONTH(date) IN (8, 9, 10) THEN FORMAT_DATE(date, '%Y-08-01'))
ELSE FORMAT_DATE(date, '%Y-11-01'))
END AS quarter_start,
CASE
WHEN MONTH(date) = 1 THEN FORMAT_DATE(date, '%Y-01-31'))
WHEN MONTH(date) IN (2, 3, 4) THEN FORMAT_DATE(date, '%Y-04-30'))
WHEN MONTH(date) IN (5, 6, 7) THEN FORMAT_DATE(date, '%Y-07-31'))
WHEN MONTH(date) IN (8, 9, 10) THEN FORMAT_DATE(date, '%Y-10-31'))
ELSE FORMAT_DATE(DATE_ADD(date, INTERVAL 1 YEAR), '%Y-01-31'))
END AS quarter_endhttps://stackoverflow.com/questions/74008964
复制相似问题