You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL自定义财年规则下生成财年季度计算列的实现方案咨询

解决方案

你需要的自定义财年季度匹配可以通过CASE WHEN条件判断实现,逻辑通用适配所有主流SQL数据库,不需要额外关联维度表,单表即可完成查询。

注:你给出的2021年Q4时间范围存在笔误,结束时间应为2022年1月28日,否则时间区间倒序不符合逻辑,下述逻辑已按修正后的规则处理。

以下是MySQL环境的参考代码,你可以根据自己使用的数据库修改日期转换、字符串拼接函数即可:

SELECT 
    `Order Number`,
    `Order Date`,
    `Amount`,
    -- 自定义财年季度计算逻辑
    CASE
        -- Q1:1月30日~4月30日
        WHEN MONTH(order_date) IN (2,3,4) 
            OR (MONTH(order_date) = 1 AND DAY(order_date) >= 30)
            THEN CONCAT('FY', RIGHT(YEAR(order_date), 2), 'Q1')
        -- Q2:5月1日~7月30日
        WHEN MONTH(order_date) = 6 
            OR (MONTH(order_date) = 5 AND DAY(order_date) >= 1)
            OR (MONTH(order_date) = 7 AND DAY(order_date) <= 30)
            THEN CONCAT('FY', RIGHT(YEAR(order_date), 2), 'Q2')
        -- Q3:7月31日~10月29日
        WHEN MONTH(order_date) IN (8,9)
            OR (MONTH(order_date) = 7 AND DAY(order_date) >= 31)
            OR (MONTH(order_date) = 10 AND DAY(order_date) <= 29)
            THEN CONCAT('FY', RIGHT(YEAR(order_date), 2), 'Q3')
        -- Q4:10月30日~次年1月28日,财年后缀取次年后两位
        ELSE CONCAT('FY', RIGHT(YEAR(order_date + INTERVAL 1 YEAR), 2), 'Q4')
    END AS `Fiscal Year`
FROM (
    -- 子查询先把字符串格式的订单日期统一转为日期类型,避免重复计算
    SELECT 
        *,
        STR_TO_DATE(`Order Date`, '%m/%d/%Y') AS order_date
    FROM 你的表名
) t

不同数据库适配修改点

  • PostgreSQL:将STR_TO_DATE替换为TO_DATE,字符串拼接可以用||运算符,年份取后两位可以用TO_CHAR(order_date, 'YY')
  • SQL Server:将STR_TO_DATE替换为CONVERT(DATE, [Order Date], 101),年份取后两位写法为RIGHT(CAST(YEAR(order_date) AS VARCHAR), 2)

以上逻辑完全匹配你给出的示例输出:比如2020年9月10日属于Q3区间,直接取当年后两位20拼接为FY20Q3,和示例结果一致。

内容的提问来源于stack exchange,提问作者Hansie Rivera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:36:08