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

SQL如何根据年份、季度字段列出对应季度包含的所有月份

问题背景

我已编写SQL代码实现如下逻辑:识别以Q1、Q2、Q3、Q4开头的字符串,匹配输出对应季度的起始月份,测试代码如下:

CREATE TABLE #Test (
  name VARCHAR (20) NOT NULL
);

INSERT INTO #Test
    (name) 
VALUES 
    ('Q324'),
    ('Q224');

SELECT 
    name 
    ,[Year] = '20' + RIGHT(name,2)
    ,[QuarterStartMonth] = CASE 
                    WHEN LEFT(name,2) = 'Q1' THEN '01'
                    WHEN LEFT(name,2) = 'Q2' THEN '04'
                    WHEN LEFT(name,2) = 'Q3' THEN '07'
                    WHEN LEFT(name,2) = 'Q4' THEN '10'
                    ELSE NULL
                END
from #Test;

运行上述代码得到的输出表示意图:
输出表示意图

现在需要进一步展示每个季度对应的所有月份,预期输出格式如下:

Name  Year   Quarter  MonthYear
Q324  2024     03      Jul-24
Q324  2024     03      Aug-24
Q324  2024     03      Sep-24

实现方案

以下是SQL Server环境下的实现代码,通过生成3行的偏移量辅助表,将单条季度数据拆分为3条月份数据,再做日期格式化即可:

-- 生成0、1、2三个月份偏移量
WITH MonthOffset AS (
    SELECT 0 AS offset UNION ALL
    SELECT 1 UNION ALL
    SELECT 2
)
SELECT 
    t.name AS [Name]
    ,[Year] = '20' + RIGHT(t.name,2)
    ,[Quarter] = RIGHT('0' + RIGHT(LEFT(t.name,2),1), 2) -- 提取季度并补为两位格式
    ,[MonthYear] = FORMAT(
                        DATEADD(MONTH, 
                                m.offset + CAST(CASE LEFT(t.name,2)
                                                WHEN 'Q1' THEN 0
                                                WHEN 'Q2' THEN 3
                                                WHEN 'Q3' THEN 6
                                                WHEN 'Q4' THEN 9 END AS INT),
                                CAST('20' + RIGHT(t.name,2) AS INT)),
                        'MMM-yy'
                    )
FROM #Test t
CROSS JOIN MonthOffset m
ORDER BY t.name, m.offset;

代码逻辑说明:

  • CTE MonthOffset生成0、1、2三个偏移量,和原表做交叉连接后每个季度会自动生成3行对应三个月份的数据
  • 季度编号直接提取name字段中Q后的数字,补前缀0即可得到两位格式的季度值
  • 用DATEADD基于季度起始月份加上偏移量得到每个月的日期,再用FORMAT函数格式化为MMM-yy格式,即可得到Jul-24这类预期输出

运行上述代码即可得到和要求完全一致的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:54:02