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

如何在Oracle SQL中创建存储季度格式字母数字序列的临时表?

生成年度季度格式序列的临时表

要生成2023Q1、2022Q4这类格式的序列并存储到临时表,你可以在现有递归年份CTE的基础上,结合季度数据集进行交叉连接,最终按年度倒序、季度倒序排列得到目标结果。

完整实现(Oracle环境)

1. 创建临时表并插入数据

-- 创建全局临时表(提交后保留数据)
CREATE GLOBAL TEMPORARY TABLE temp (yearlyQuarters VARCHAR2(6)) ON COMMIT PRESERVE ROWS;

-- 递归生成年份+季度并插入临时表
WITH years(n) AS (
    SELECT 1900 FROM dual
    UNION ALL
    SELECT n + 1 FROM years WHERE n < 3000
),
quarters(q) AS (
    SELECT 4 FROM dual
    UNION ALL
    SELECT q - 1 FROM quarters WHERE q > 1
)
INSERT INTO temp(yearlyQuarters)
SELECT TO_CHAR(n) || 'Q' || q
FROM years
CROSS JOIN quarters
ORDER BY n DESC, q DESC;

2. 查询验证

执行以下语句即可得到你需要的序列:

SELECT yearlyQuarters FROM temp;

代码解释

  • years CTE:递归生成1900到2999的所有年份值
  • quarters CTE:生成4到1的季度数字,确保每个年份的季度按倒序生成
  • CROSS JOIN:将每个年份与4个季度进行组合,拼接成年份Q季度的字符串格式
  • 插入临时表时按年份降序、季度降序排序,保证结果顺序符合要求

简化方案(无需临时表直接查询)

如果不需要持久化存储,直接用CTE查询即可获取结果:

WITH years(n) AS (
    SELECT 1900 FROM dual
    UNION ALL
    SELECT n + 1 FROM years WHERE n < 3000
),
quarters(q) AS (
    SELECT 4 FROM dual
    UNION ALL
    SELECT q - 1 FROM quarters WHERE q > 1
)
SELECT TO_CHAR(n) || 'Q' || q AS yearlyQuarters
FROM years
CROSS JOIN quarters
ORDER BY n DESC, q DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:40:34