首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎样才能在MySQL得到非标准季度的第一次约会?

我怎样才能在MySQL得到非标准季度的第一次约会?
EN

Stack Overflow用户
提问于 2022-10-09 23:03:59
回答 2查看 38关注 0票数 0

我正在尝试使用MySQL获取非标准季度的开始/结束日期。This question/answer很好地获得标准季度的开始/结束日期(一月至三月,四月至六月等)。

如果该季度不是从一个典型的会计年度季度开始(一月至三月、四月至六月等),对如何修改查询有任何建议吗?我有一个案子,我需要这个季度从二月开始(二月到四月,五月到七月等)。以及三月开始(三月至五月,六月至八月等)。

我尝试过调整间隔,以适应1或2个月内的转换,但是由于MySQL使用标准的季度返回一个集合1, 2,3,4的季度,所以它不能正常工作。

下面是来自先前链接的问题的查询,该问题返回标准日历年度季度的开始/结束(传递一个日期,我感兴趣的是获取该季度的开始/结束日期):

代码语言:javascript
复制
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?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-10 00:45:35

这是简单的约会数学。

代码语言:javascript
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2022-10-09 23:15:19

从这个月开始,你得自己计算。

代码语言:javascript
复制
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_end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74008964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档