如何用MS SQL根据指定日期与星期几查询对应周日期?
在MS SQL中根据指定日期和星期几查找对应周的目标日期
嘿,如果你需要在MS SQL里根据给定日期,定位到它所在周的某个指定星期几的日期,这个简洁的方案可以直接用:
核心SQL语句
SELECT DATEADD(WK, DATEDIFF(WK, @targetWeekday, @inputDate), @targetWeekday);
逻辑拆解
这个公式的思路其实很简单:
- 先用
DATEDIFF(WK, @targetWeekday, @inputDate)算出从目标星期几的基准值到输入日期之间隔了多少周 - 再用
DATEADD(WK, ..., @targetWeekday)把这个周数加到基准值上,就能得到输入日期所在周的目标星期几的具体日期
实际示例(以输入日期'2018-04-04'为例)
这里的@targetWeekday参数对应星期几的规则是基于SQL Server的默认星期设定(周日为一周的起始):
- 传入6 → 对应周日,返回结果:
2018-04-01 00:00:00.000 - 传入0 → 对应周一,返回结果:
2018-04-02 00:00:00.000 - 传入1 → 对应周二,返回结果:
2018-04-03 00:00:00.000 - 传入2 → 对应周三(和输入日期同一天),返回结果:
2018-04-04 00:00:00.000 - 以此类推:参数3对应周四,4对应周五,5对应周六
进阶:封装成函数复用
如果需要频繁使用这个功能,可以把它封装成自定义函数:
CREATE FUNCTION dbo.GetTargetWeekdayDate(@inputDate DATE, @targetWeekday INT) RETURNS DATETIME AS BEGIN RETURN DATEADD(WK, DATEDIFF(WK, @targetWeekday, @inputDate), @targetWeekday); END
调用的时候就很方便了:
-- 获取2018-04-04所在周的周日日期 SELECT dbo.GetTargetWeekdayDate('2018-04-04', 6);
内容的提问来源于stack exchange,提问作者Niteesh Kumar
相关产品推荐
相关产品推荐

