上一篇
"小张,快帮我看看!" 同事小王急匆匆跑来,"客户要求每周五自动发送报表,但系统总在周四就发了,老板都快炸了💥!"
原来,小王用错了日期判断方法,在SQL Server中,准确判断星期几看似简单,但隐藏着不少坑🕳️,今天我们就来彻底解决这个问题!
SQL Server提供了几个强大的日期函数来处理星期几的判断:
DATEPART
函数(最常用)-- 返回1-7,1=周日,2=周一...7=周六(默认美国周计数) SELECT DATEPART(weekday, '2025-08-15') AS WeekdayNumber; -- 配合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;
DATENAME
函数(直接返回英文名)-- 返回英文星期名称(受语言设置影响) SELECT DATENAME(weekday, '2025-08-15') AS EnglishWeekday; -- 可能返回'Friday'或'星期五',取决于服务器配置
FORMAT
函数(SQL Server 2012+)-- 新版本推荐用法,直接格式化输出 SELECT FORMAT('2025-08-15', 'dddd') AS WeekdayName; -- 返回'Friday' SELECT FORMAT('2025-08-15', 'ddd') AS ShortWeekday; -- 返回'Fri'
-- 关键设置:查看当前周起始日 SELECT @@DATEFIRST AS CurrentFirstDayOfWeek; -- 默认美国标准(周日=1),中国习惯周一作为第一天 -- 临时修改周起始日(仅当前会话有效) SET DATEFIRST 1; -- 将周一设为每周第一天
-- 不同语言返回不同结果 SET LANGUAGE '简体中文'; SELECT DATENAME(weekday, '2025-08-15'); -- 返回'星期五' SET LANGUAGE 'us_english'; SELECT DATENAME(weekday, '2025-08-15'); -- 返回'Friday'
-- 使用固定算法计算星期几(Zeller公式原理) SELECT ('日一二三四五六' + '') SUBSTRING('日一二三四五六', (DATEPART(weekday, DATEADD(day, @@DATEFIRST-1, '2025-08-15')) % 7 + 1, 1) AS Weekday;
-- 方案1:统一设置环境后使用(推荐) SET DATEFIRST 1; -- 确保周一是一周第一天 SET LANGUAGE '简体中文'; SELECT DATEPART(weekday, '2025-08-15') AS WeekdayNum, DATENAME(weekday, '2025-08-15') AS WeekdayName; -- 方案2:使用FORMAT函数(SQL Server 2012+) SELECT FORMAT('2025-08-15', 'dddd') AS WeekdayName; -- 方案3:创建自定义函数 CREATE FUNCTION dbo.GetChineseWeekday(@date DATE) RETURNS NVARCHAR(3) AS BEGIN RETURN SUBSTRING('日一二三四五六', (DATEPART(weekday, @date) + @@DATEFIRST - 1) % 7 + 1, 1); END;
回到开头的故事,正确的解决方案应该是:
-- 确保周五触发(考虑周起始日设置) IF DATEPART(weekday, GETDATE()) = 6 -- 假设已设置DATEFIRST 1(周一=1) BEGIN EXEC sp_send_report; -- 执行发送报表的存储过程 END
SELECT CASE WHEN DATEPART(weekday, '2025-08-15') BETWEEN 2 AND 6 THEN '工作日' ELSE '周末' END AS DayType;
SELECT DATEADD(day, (9 - DATEPART(weekday, GETDATE())) % 7, GETDATE()) AS NextMonday;
💡 小贴士:在SQL Server 2022最新版本中,新增了
WEEKDAY()
函数,用法更直观,建议升级后使用!
现在你已经成为SQL Server日期处理专家了!下次再遇到星期几的问题,就淡定地甩出这些代码吧~ 😎
本文由 东灵萱 于2025-08-05发表在【云服务器提供商】,文中图片由(东灵萱)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/540549.html
发表评论