上一篇
场景引入
"小王最近接到一个需求:公司需要统计每周五的订单量,但数据库里只有下单日期,他盯着屏幕上的日期数据发愁——'2025-08-15'到底是星期几?难道要手动查日历吗?"
别急!SQL Server 提供了一套强大的日期函数,能轻松解决这类问题,下面我们就来详细讲解如何用 SQL Server 判断任意日期是星期几,并基于此进行日期计算。
DATEPART
返回日期的指定部分(如年、月、日、星期等)的数值,判断星期几的语法:
SELECT DATEPART(weekday, '2025-08-15') AS WeekdayNumber;
返回值说明:
SET DATEFIRST
影响(后文会说明调整方法) DATENAME
返回日期部分的名称(英文):
SELECT DATENAME(weekday, '2025-08-15') AS WeekdayName; -- 输出:Friday
如果需要显示中文星期(如"星期五"),可通过 CASE
语句实现:
SELECT CASE DATEPART(weekday, '2025-08-15') WHEN 1 THEN '星期日' WHEN 2 THEN '星期一' WHEN 3 THEN '星期二' WHEN 4 THEN '星期三' WHEN 5 THEN '星期四' WHEN 6 THEN '星期五' WHEN 7 THEN '星期六' END AS ChineseWeekday;
SQL Server 默认将周日视为一周的第一天(DATEPART
返回1),如果需要改为周一为首日,使用:
SET DATEFIRST 1; -- 1=星期一,7=星期日 SELECT DATEPART(weekday, '2025-08-15'); -- 此时周五会返回5
-- 查询2025年第32周(8月4日-8月10日)的订单 SELECT * FROM Orders WHERE DATEPART(week, OrderDate) = 32 AND YEAR(OrderDate) = 2025;
DECLARE @Today DATE = GETDATE(); SELECT DATEADD(day, (CASE WHEN DATEPART(weekday, @Today) <= 6 THEN 6 - DATEPART(weekday, @Today) ELSE 6 + (7 - DATEPART(weekday, @Today)) END), @Today) AS NextFriday;
SELECT DATEPART(week, OrderDate) AS WeekNumber, COUNT(*) AS FridayOrders FROM Orders WHERE DATEPART(weekday, OrderDate) = 6 -- 假设DATEFIRST=7(周日为1) GROUP BY DATEPART(week, OrderDate);
DATEPART
时,考虑建立计算列索引 ISO_WEEK
(DATEPART(iso_week, date)
)
通过 DATEPART
、DATENAME
和 DATEFIRST
的组合,SQL Server 可以灵活处理星期相关的所有需求,下次遇到"这天是星期几"的问题时,不妨直接让数据库告诉你答案!
(本文基于 SQL Server 2022 版本验证,日期规则参考 2025-08 时区标准)
本文由 澹台韵 于2025-08-04发表在【云服务器提供商】,文中图片由(澹台韵)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/535708.html
发表评论