如何提取YYYYQ格式季度标识,按Report_date所属范围返回对应季度结果
按日期匹配季度功能实现方案
规则说明
根据需求,季度匹配逻辑为自然季度划分:
- 每年1-3月的日期,对应输出格式为
YYYYQ1 - 每年4-6月的日期,对应输出格式为
YYYYQ2 - 每年7-9月的日期,对应输出格式为
YYYYQ3 - 每年10-12月的日期,对应输出格式为
YYYYQ4
实现思路
核心逻辑为两步:
- 提取日期字段的年份值
- 根据月份值计算所属季度编号,最终将年份、固定字符
Q、季度编号拼接为要求的格式即可。
不同数据库的实现代码
MySQL
SELECT Report_date, CONCAT(YEAR(Report_date), 'Q', CEIL(MONTH(Report_date)/3)) AS quarter FROM ABC;
PostgreSQL
SELECT Report_date, CONCAT(EXTRACT(YEAR FROM Report_date), 'Q', CEIL(EXTRACT(MONTH FROM Report_date)::NUMERIC / 3)) AS quarter FROM ABC;
Oracle
Oracle原生支持直接通过日期格式化函数输出要求格式,无需手动计算季度:
SELECT Report_date, TO_CHAR(Report_date, 'YYYY"Q"Q') AS quarter FROM ABC;
SQL Server
SELECT Report_date, CONCAT(YEAR(Report_date), 'Q', DATEPART(QUARTER, Report_date)) AS quarter FROM ABC;
效果验证
输入示例中的
2020-01-31、2020-02-29、2020-03-31三个日期时,以上所有查询返回的季度标识均为2020Q1,完全符合需求要求。
内容的提问来源于stack exchange,提问作者Dhivya
相关产品推荐
相关产品推荐

