DAYOFYEAR 详细讲解
一、DAYOFYEAR 是什么?
DAYOFYEAR 是 SQL 中的一个日期函数,用于返回一个日期在当年中的第几天,返回值范围是 1 到 366。
sql
SELECT DAYOFYEAR('2024-04-14');-- 结果:105(2024年1月1日算第1天,4月14日是第105天)二、词源拆解
text
DAYOFYEAR = DAY + OF + YEAR
| 部分 | 词源 | 含义 |
|---|---|---|
| DAY | 古英语 dæg | 天、日子 |
| OF | 古英语 of | 的、属于 |
| YEAR | 古英语 gēar | 年 |
字面意思:"日子在年份中的位置",即一年中的第几天。
三、语法
MySQL / SQL Server
sql
DAYOFYEAR(date)
Oracle
sql
TO_CHAR(date, 'DDD') -- 返回字符串,如 '105'
PostgreSQL
sql
EXTRACT(DOY FROM date) -- DOY = Day Of Year
四、各数据库写法对比
数据库 | 写法 | 示例 | 结果 |
MySQL | DAYOFYEAR('2024-04-14') | 直接返回数字 | 105 |
SQL Server | DATEPART(DAYOFYEAR, '2024-04-14') | 105 | |
Oracle | TO_CHAR('2024-04-14', 'DDD') | '105'(字符串) | |
PostgreSQL | EXTRACT(DOY FROM '2024-04-14') | 105 |
五、计算示例
1月1日:第1天
sql
SELECT DAYOFYEAR('2024-01-01'); -- 结果:12月1日:第32天(1月31天 + 1)
sql
SELECT DAYOFYEAR('2024-02-01'); -- 结果:3212月31日:第366天(闰年)或第365天(平年)
sql
SELECT DAYOFYEAR('2024-12-31'); -- 结果:366(2024年是闰年)SELECT DAYOFYEAR('2023-12-31'); -- 结果:365(2023年是平年)六、实际应用场景
1、计算今天是今年的第几天
sql
SELECT DAYOFYEAR(CURDATE());
2、计算距离年底还有多少天
sql
SELECT
DAYOFYEAR('2024-12-31') - DAYOFYEAR(CURDATE()) AS 剩余天数;3、查询某个时间段内的数据(按年中的第几天筛选)
sql
-- 查询每年第100天到第150天之间录入的图书SELECT * FROM bookinfo WHERE DAYOFYEAR(intime) BETWEEN 100 AND 150;
4、判断今天是否在上半年
sql
SELECT CASE WHEN DAYOFYEAR(CURDATE()) <= 181 THEN '上半年' ELSE '下半年' END AS 时间段;
七、相关日期函数对比
函数 | 含义 | 返回值 | 示例(2024-04-14) |
DAYOFYEAR() | 一年中的第几天 | 1-366 | 105 |
DAYOFMONTH() | 一个月中的第几天 | 1-31 | 14 |
DAYOFWEEK() | 一周中的第几天 | 1-7(周日=1) | 1(周日)或 7(周六,取决于设置) |
WEEK() | 一年中的第几周 | 1-53 | 15 |
MONTH() | 月份 | 1-12 | 4 |
QUARTER() | 季度 | 1-4 | 2 |
八、闰年的影响
年份 | 是否闰年 | 2月天数 | 全年天数 | 12月31日的 DAYOFYEAR |
2023 | ❌ 平年 | 28天 | 365 | 365 |
2024 | ✅ 闰年 | 29天 | 366 | 366 |
2025 | ❌ 平年 | 28天 | 365 | 365 |
sql
-- 闰年判断SELECT
DAYOFYEAR('2024-12-31') AS 闰年最后一天, -- 366
DAYOFYEAR('2023-12-31') AS 平年最后一天; -- 365九、总结
| 问题 | 答案 |
|---|---|
DAYOFYEAR 是什么? | SQL 日期函数,返回日期在一年中的第几天 |
| 词源 | Day(天)+ Of(的)+ Year(年)= 一年中的第几天 |
| 返回值范围 | 1(1月1日)到 366(闰年12月31日) |
| 常见用途 | 日期计算、统计分析、判断日期位置 |
一句话总结:DAYOFYEAR 告诉你在一年365天(或366天)中,某个日期排在第几位——1月1日是第1天,12月31日是第365或366天