在MySQL的业务查询场景中,经常需要按季度维度统计数据,比如统计每个季度的订单量、用户注册量等,这就需要先获取日期对应的季度信息。MySQL提供了专门的函数来处理这类需求,既可以获取当前日期的季度,也可以处理任意给定的日期。

核心函数:QUARTER()
MySQL内置的QUARTER()函数是获取日期季度的核心工具,它的作用是返回一个日期对应的季度值,返回值范围是1到4,分别对应一年中的第一到第四季度。该函数的语法非常简单,接收一个日期类型的参数即可。
函数的基本语法如下:
QUARTER(date) -- date参数为合法的日期表达式,可以是DATE、DATETIME、TIMESTAMP类型的字段,也可以是合法的日期字符串
获取当前日期的季度
如果需要获取当前系统日期对应的季度,只需要将CURDATE()、NOW()等获取当前日期的函数作为QUARTER()的参数即可。
示例代码
-- 获取当前日期的季度,CURDATE()返回当前日期的DATE类型值 SELECT QUARTER(CURDATE()) AS current_quarter; -- 使用NOW()获取当前日期时间,函数会自动提取日期部分计算季度 SELECT QUARTER(NOW()) AS current_quarter;
执行结果说明
如果当前日期是2024年5月20日,那么上述两个查询都会返回结果2,因为5月属于第二季度。
获取特定给定日期的季度
除了当前日期,实际开发中更多时候需要获取表中某个日期字段,或者指定的某个日期字符串对应的季度,这时候直接把对应的日期值传给QUARTER()函数即可。
场景1:查询表中日期字段的季度
假设有一张订单表order_info,其中create_time是订单创建的日期时间字段,要查询每个订单对应的季度,可以这样写:
SELECT
order_id,
create_time,
QUARTER(create_time) AS order_quarter
FROM order_info
LIMIT 10;
场景2:查询指定日期字符串的季度
如果需要查询某个固定日期的季度,直接传入符合MySQL日期格式的字符串即可,常见的格式如YYYY-MM-DD、YYYY/MM/DD都可以被正确识别。
-- 查询2023年10月1日对应的季度,返回4
SELECT QUARTER('2023-10-01') AS target_quarter;
-- 查询2024年2月15日对应的季度,返回1
SELECT QUARTER('2024/02/15') AS target_quarter;
结合季度做统计查询
获取季度的能力最常用的场景就是按季度分组统计,比如统计每个季度的订单总金额:
SELECT
QUARTER(create_time) AS quarter,
COUNT(order_id) AS order_count,
SUM(order_amount) AS total_amount
FROM order_info
WHERE create_time >= '2024-01-01' AND create_time < '2025-01-01'
GROUP BY QUARTER(create_time)
ORDER BY quarter;
注意事项
- 传入
QUARTER()函数的参数必须是合法的日期类型或者日期字符串,如果传入NULL,函数会返回NULL。 - 如果传入的字符串无法被解析为合法日期,比如
'2024-13-01',MySQL会返回NULL,不会报错,所以查询前最好确认日期的合法性。 - 季度计算规则是固定的:1-3月为Q1,4-6月为Q2,7-9月为Q3,10-12月为Q4,不受时区影响,仅和日期的月份有关。